我正在使用d_name作为主键的指定表,我在用户表中使用它作为外键引用。我在hbm中使用hbm进行映射我将id定义为d_name映射到数据库列。我得到了一个错误说
"integrity constraint violation(user_designation_fk) parent key not found. "
我哪里出错/这个错误即将来临,我想添加一个用户从指定表中选择一个指定读数。
用户hbm如下
<hibernate-mapping>
<class name="com.User" table="USER">
<id column="USER_ID" name="id" >
<generator class="assigned">
</generator>
</id>
<property column="d_name" name="dName"/>
</class>
</hibernate-mapping>
指定hbm如下
<hibernate-mapping>
<class name="com.Designation" table="Designation">
<id column="d_name" name="dName" >
<generator class="assigned">
</generator>
</id>
</class>
</hibernate-mapping>
和要保存的代码是
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
答案 0 :(得分:0)
很难在没有看到任何代码或映射的情况下向您提供确切的问题,但是在保存之前是否“设置”了用户的名称?
答案 1 :(得分:0)
你说com.User的属性“dname”引用了com.designation类型的id。 我想你已经在数据库中对它进行了这样的建模,表user中的列d_name是表名中d_name的外键。
这意味着如果您不保留它引用的指定对象,则无法保留用户对象。此外,如果约束检查不能像mysql那样被定义到事务结束,那么首先插入引用的对象是很重要的。也许在该外键上甚至存在非空约束。
在任何情况下,您都应该在对象之间声明这种关联,因此hibernate知道它并且可以按正确的顺序执行insert语句。即在com.user类型中,你不应该使用属性元素,而是使用:
<hibernate-mapping>
<class name="com.User" table="USER">
<id column="USER_ID" name="id" >
<generator class="assigned"></generator>
</id>
<many-to-one
name="dName"
column="d_name" />
</class>
</hibernate-mapping>
请查看hibernate core documentation的第7章。
此致 大卫