我在使用hibernate时遇到了一些麻烦。我想在CollaborateableImpl对象中存储Transaction对象列表。
所以我的CollaiberableImpl的hibernate配置文件如下所示:
<class name="CollaborateableImpl" table="Collaborateable">
<id name="id" type="int" column="id">
<generator class="increment" />
</id>
<property name="name" column="name" type="string" not-null="true" />
<property name="keywords" column="keywords" type="string"/>
<!-- Transactions -->
<list name="transactions" table="Transaction" lazy="false" cascade="all" fetch="select">
<key>
<column name="Collaborateable_id" />
</key>
<index column="idx"/>
<one-to-many class="TransactionImpl" />
</list>
</class>
我的交易配置文件:
<class name="TransactionImpl" table="Transaction">
<id name="id" type="string" column="id">
<!-- Generator is not needed, since the id is generated with uuid on client -->
</id>
<map name="vectorClock" table="VectorClockEntry" cascade="delete">
<key column="Transaction_id" />
<map-key column="User_id" type="int" />
<element column="value" type="long" />
</map>
</class>
因此,我创建了一个CollaborateableImpl对象,使用session.save(collaborateableImpl)存储此对象。一切正常。 所以现在我想将一个TransactionImpl对象添加到collaborateImpl对象的Transaction列表中。
TransactionImpl t = new TransactionImpl();
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
collaborateableImpl.addTransaction(t);
session.update(c);
tx.commit();
session.flush();
session.close();
不幸的是抛出异常: java.sql.SQLException:字段'Collaborateable_id'没有默认值
我明白,hibernate试图说什么,但我不知道如何解决这个问题。 有什么建议吗?
答案 0 :(得分:0)
我找到了解决方案,我需要在Transaction配置文件中定义一个Tag:
<many-to-one name="collaborateable" class="CollaborateableImpl" fetch="select">
<column name="Collaborateable_id" not-null="true" />
</many-to-one>