2010-04-19 105 views
1

我有d_name作爲主鍵,其我使用在用戶表作爲外鍵引用.I正在使用HBM用於指定HBM映射的指定表I具有的ID映射到數據庫列.I我得到一個錯誤說休眠衝突錯誤

"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

亞我已經爲用戶的指定,whehter這將導致其d_name在指定NOT NULL和空用戶的問題? – sarah 2010-04-19 14:01:27

+0

@sarah請在您嘗試添加新用戶的位置顯示您的映射和代碼。 – 2010-04-19 14:11:16

0

你說com.User的財產「DNAME」引用類型com.designation的ID。 我想你已經在數據庫中像這樣建模了它,並且表user中的列d_name是表名中d_name的外鍵。

這意味着你不能堅持用戶對象,如果不堅持也指定對象,它引用。另外,如果受限檢查不能像mysql的情況那樣被拖到事務結束,那麼首先插入被引用的對象是很重要的。也許這個外鍵甚至有一個非空限制。

在任何情況下,你應該也宣佈該協會的對象之間,所以冬眠知道它並能做到在正確的順序插入語句。即在類型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章。

問候 大衛