您好我正在尝试使用同一个表上的不同键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);
答案 0 :(得分:0)
当您将两个Answers列表映射到同一个表时,您必须将关键列qid
和java_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。