Hibernate违规错误

时间:2010-04-19 13:45:05

标签: java hibernate orm

我正在使用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();

2 个答案:

答案 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章。

此致 大卫

相关问题