Hibernate插入与删除数据的问题
首先说明表关系:
Chickling为外键表;ChicklingManufecturer为主键表;
外键表ManufecturerNumber字段与主键表关联;
XML code
<many-to-one name="chicklingManufecturer" class="manufecturerPojo.ChicklingManufecturer" fetch="select">
<column name="ManufecturerNumber" length="50" />
</many-to-one>
Chickling表有非自增的主键ChicklingNumber,本身作为ChicklingNumber表的主键表;
XML code
<id name="chicklingNumber" type="java.lang.Integer">
<column name="ChicklingNumber" />
<generator class="identity" />
</id>
XML code
<set name="productTraceInfos" inverse="true">
<key>
<column name="ChicklingNumber" />
</key>
<one-to-many class="pojo.ProductTraceInfo" />
</set>
现在我要向Chickling中插入数据,Action中的代码我这样写的:
Java code
chickling.setBatch("1");
ChicklingManufecturer CM= new ChicklingManufecturer();//创建子表对象
CM.setManufecturerName("1");//设置子表的主键值
chickling.setChicklingNumber(new Integer(5));
chickling.setChicklingManufecturer(CM);
chickling.setChicklingName("123");
chickling.setDate(new Date());
chickling.setGgeneration("gg");
chickling.setIncubatorNumber("123");
chickling.setInputNumber(new Integer(1));
chickling.setPgerneration("456");
chickling.setRemark("remark");
Service.Save(chickling);
异常如下:
Hibernate: insert into TraceSystem.dbo.Chickling (ManufecturerNumber, Date, Batch, GGeneration, PGerneration, ChicklingName, Remark, IncubatorNumber, InputNumber) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
org.springframework.dao.DataIntegrityViolationException: could not insert: [pojo.Chickling];
nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [pojo.Chickling]
Caused by: org.hibernate.exception.
ConstraintViolationException: could not insert: [pojo.Chickling]
Caused by:
com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'ChicklingNumber',表 'TraceSystem.dbo.Chickling';列不允许有空值。INSERT 失败。
从显示的SQL语句可以看出它没有去插入主键值.我很奇怪为什么.不可能是因为是主键所以不能插入吧?我又没设置为自增的.
还有问题就是,我传入了一个子表的对象如果我保存Chickling对象时,会不会在子表中也出现一条记录?
同样如果我删除会不会删除一条对应的记录?
我猜是不会...但是还是请前辈们指教.
小弟第一次做这样几张表关联的东西,弄的很郁闷...如果有什么经验,还望前辈们指点.
------解决方案--------------------看是主键生成策略的问题
修改哈映射文件
------解决方案--------------------你既然表中没有设置自动增长的,而且映射文件中也没有设置自动增长的
那么就更应该要显示的插入ChicklingNumber的值啦
ChicklingNumber又是表的主键,你说主键能为空么??
------解决方案--------------------<generator class="identity" />
主键生成策略error
这种是要求DB有标识和步长的那种,你自己指定要 <generator class="assigned " />
级联你也没配置你的担心纯属多余。