hibernate的级联删除问题

我有两个表一个是news表,一个是newsType表
如下:
CREATE TABLE NewsType(
TypeID int PRIMARY KEY NOT NULL identity(1,1) ,
TypeName VARCHAR(400) NOT NULL,
DirName VARCHAR(400) NOT NULL,
TemplateName VARCHAR(400) NOT NULL
);
CREATE TABLE News
(
NewsID int identity(1,1) PRIMARY KEY ,
TypeID int NOT NULL references NewsType(TypeID) on delete cascade,
Title VARCHAR(400) NOT NULL,
HitCount int DEFAULT 0 NOT NULL,
IssuseDate datetime NOT NULL,
DeployerID int NOT NULL,
Origin VARCHAR(400) NOT NULL,
URL VARCHAR(400) NOT NULL,
KEYWORDS VARCHAR(400) ,
Priority int DEFAULT 0 NOT NULL,
Special VARCHAR(400) ,
Description VARCHAR(400),
Author VARCHAR(400),
Topic VARCHAR(400)

);
下面是:News.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="cn.model.mapping.News" table="News" schema="dbo" catalog="demo">
<id name="newsId" type="java.lang.Integer">
<column name="NewsID" />
<generator class="native" />
</id>
<!-- <property name="typeId" column="TypeID" type="java.lang.Integer" not-null="true"/> -->

<many-to-one name="newsType" class="cn.model.mapping.NewsType" fetch="select" insert="false" update="false">
<column name="TypeID" not-null="true" />
</many-to-one>
<property name="title" type="java.lang.String">
<column name="Title" length="400" not-null="true" />
</property>
<property name="hitCount" type="java.lang.Integer">
<column name="HitCount" not-null="true" />
</property>
<property name="issuseDate" type="java.util.Date">
<column name="IssuseDate" length="23" not-null="true" />
</property>
<property name="deployerId" type="java.lang.Integer">
<column name="DeployerID" not-null="true" />
</property>
<property name="origin" type="java.lang.String">
<column name="Origin" length="400" not-null="true" />
</property>
<property name="url" type="java.lang.String">
<column name="URL" length="400" not-null="true" />
</property>
<property name="keywords" type="java.lang.String">
<column name="KEYWORDS" length="400" />
</property>
<property name="priority" type="java.lang.Integer">
<column name="Priority" not-null="true" />
</property>
<property name="special" type="java.lang.String">
<column name="Special" length="400" />
</property>
<property name="description" type="java.lang.String">
<column name="Description" length="400" />
</property>
<property name="author" type="java.lang.String">
<column name="Author" length="400" />
</property>
<property name="topic" type="java.lang.String">
<column name="Topic" length="400" />
</property>
</class>
</hibernate-mapping>

NewsType.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="cn.model.mapping.NewsType" table="NewsType" schema="dbo" catalog="demo">
<id name="typeId" type="java.lang.Integer">
<column name="TypeID" />
<generator class="native" />
</id>
<property name="typeName" type="java.lang.String">
<column name="TypeName" length="400" not-null="true" />
</property>
<property name="dirName" type="java.lang.String">
<column name="DirName" length="400" not-null="true" />
</property>
<property name="templateName" type="java.lang.String">
<column name="TemplateName" length="400" not-null="true" />
</property>
<set name="newses" inverse="true" cascade="all-delete-orphan">
<key>
<column name="TypeID" not-null="true" />
</key>
<one-to-many class="cn.model.mapping.News" />
</set>
</class>
</hibernate-mapping>

当我测试的时候 我要向news表里单独插入数据的时候,就出现异常:
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [cn.model.mapping.News]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1986)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
at cn.model.test.Test.main(Test.java:68)
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]无法将 NULL 值插入列 'TypeID',表 'demo.dbo.News';该列不允许空值。INSERT 失败。

但是,要是同是向两个表里插入数据时,就能成功。是怎么回事啊?

Test.java

package cn.model.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.model.HibernateSessionFactory;
import cn.model.mapping.NewsType;

public class Test {



public static void main(String args[]){

Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();

Query query=session.createQuery("from NewsType nt where nt.typeId=13");
List list=query.list();
NewsType newsType=(NewsType)list.get(0);
session.delete(newsType);
session.flush();
session.close();

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值