Hibernate GenericJDBCException:字段'KeyID'没有默认值

时间:2014-03-06 09:21:27

标签: java hibernate orm hibernate-mapping

您好我正在尝试使用同一个表上的不同键ID创建一对多的字符串对象关系。

但是当我插入数据时,它将显示异常“来自服务器的常规错误消息:”字段'qid'没有默认值“。

如何解决hibernate中的问题。请参考以下代码。

     <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);

2 个答案:

答案 0 :(得分:0)

当您将两个Answers列表映射到同一个表时,您必须将关键列qidjava_qid定义为可为空。

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

答案 1 :(得分:0)

我的英语不好,但是,你的数据库表中可能有一个未在实体类代码中定义的列(自我体验),如果你触摸一个表&#34;手动&#34;,例如,使用像Heidi这样的图形界面,然后在实体类中进行更改,即使您没有在代码中使用它,旧列仍然可以在表中。 因此,如果你的实体类中有attribute1,attribute2和attribute3,你将通过它们插入数据,但是你的表中存在一个fieldX,并且既没有设置/获取方法,也没有定义默认值,所以当你尝试插入这个&#34; fieldX&#34;发送一个例外:&#34; Field&#39; fieldX&#39;没有默认值&#34;。 我修复了压制表并重新执行hibernate的问题,然后是fieldX dissapear。