2014-03-06 90 views
0

嗨我想創建一個到多個關係與字符串對象與同一個表上的不同的密鑰ID。休眠GenericJDBCException:字段'KeyID'沒有默認值

但是當我插入的數據會顯示異常「從服務器一般錯誤消息:‘字段‘QID’沒有缺省值’

如何解決休眠問題,請參考。下面的代碼

 <class name="com.db.HRQuestion" table="HRQuestion"> 
     <id name="id"> 
     <generator class="increment"></generator> 
     </id> 
     <property name="qname"></property> 
     <list name="answers" table="answer"> 
     <key column="qid"></key> 
     <index column="type"></index> 
     <element column="answer" type="string"></element> 
     </list> 
     </class> 
     <class name="com.db.JavaQuestion" table="javaQuestion"> 
     <id name="id"> 
      <generator class="increment"></generator> 
     </id> 
     <property name="qname"></property> 

     <list name="answers" table="answer"> 
      <key column="java_qid"></key> 
      <index column="type"></index> 
      <element column="answer" type="string"></element> 
     </list> 

    </class> 

Java代碼是:

JavaQuestion javaQuestion= new JavaQuestion(); 
javaQuestion.setQname("What is meant by java?"); 
ArrayList<String> javaanswerlist=new ArrayList<String>(); 
javaanswerlist.add("java is Object oriented programming "); 
javaanswerlist.add("java is a platform independent"); 
javaQuestion.setAnswers(javaanswerlist); 

HRQuestion hrquestion=new HRQuestion(); 
hrquestion.setQname("Hr Question one"); 
ArrayList<String> list2=new ArrayList<String>(); 
list2.add("My profile ....."); 
list2.add("My objetcive..."); 
hrquestion.setAnswers(list1); 

session.save(javaQuestion); 
session.save(hrquestion); 

回答

0

當你映射解答同桌的兩個列表,你必須同時定義鍵列qidjava_qid可爲空。

<key column="qid" not-null="false"></key> 
.... 
<key column="java_qid" not-null="false"></key> 
0

我的英語不是很好,但是,你可能在你的數據庫表中的列未在實體類代碼定義(個體經營經驗),如果「手動」觸摸表,例如,使用像Heidi這樣的圖形界面,然後在實體類中進行更改,即使不在代碼中使用它,舊列仍可能仍在表中。 因此,如果您的實體類中有屬性1,屬性2和屬性3,您將通過它們插入數據,但表中存在fieldX,並且既沒有設置/獲取方法也沒有定義默認值,所以當你嘗試插入時,這個「fieldX」發送一個異常:「Field'fieldX'沒有默認值」。 我解決了壓制表的問題,並重新執行休眠,然後fieldX消失。