hibernate向从表插入数据问题???

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:54:04
我现在有两张表,学院表(institute)和系表(department)。其中有外键关系,系表的一个字段是学院的编号,这样就区分来了各个系隶属与哪个学院。
用hibernate将表都映射成JAVA文件。估计代码没问题。
然后现在我想向从表中输入一个新记录也就是一个新系。
获得从表的一个对象:d01,要插入学院的一个对象i01;
d01.setInstitute(i01); //取得要插入学院的对象,用于和主表进行关联
d01.setDepartmentName("计算机");//设置系名
d01.setDepartmentNum("009");//设置系编号
DepartmentDAO dao01=new DepartmentDAO();
dao01.save(d01);
必填字段就这些。
可是我在save()的时候它提示主表主键冲突:
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]INSERT 语句与 COLUMN FOREIGN KEY 约束 'FK__Departmen__insti__56E8E7AB' 冲突。该冲突发生于数据库 'Laboratory',表 'institute', column 'institute_num'。

不知所云...
高手指点啊,指点下插入的思路也好,是直接向从表插入数据就可以还是必须有其他什么步骤??在线等,着急啊,QQ:80764911。

因为save的时候会保存d01和i01两个对象,并不是象你所想象的那样i01会自动判断有了就不插入了。你的思路还是停留在sql上并没有理解好hib的oo特性。应该这样:

HibSessionFactory.beginTran();
i01 = XXX.get(); //得到学院对象,而不是自行创建
i01.getList().add(d01); //加入的方向与你的相反
dao.save(i01);
HibSessionFactory.endTran();

顺便说下这个错误发生在数据库级别,并不是hibernate级别。

把你的映射表贴代码贴出来看看