我是Hibernate的新手,正在尝试使用“WorkspaceState”列表保存“UserState”。 UserState对象由设置的用户名键控,WorkspaceStates由UUID方案设置。我的问题是,如果我有一个包含一个WorkspaceState的UserState,则会保存UserState,但WorkspaceState不会。
以下是Hibernate映射
<hibernate-mapping>
<class name="UserState" table="USERSTATE">
<id name="owner" type="java.lang.String">
<column name="OWNER" />
<generator class="assigned" />
</id>
<list name="workspaces" inverse="false" cascade="all" table="WORKSPACESTATE" lazy="true">
<key>
<column name="UID" />
</key>
<list-index></list-index>
<one-to-many class="WorkspaceState" />
</list>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="WorkspaceState" table="WORKSPACESTATE">
<id name="uid" type="java.lang.String">
<column name="UID" />
<generator class="uuid" />
</id>
<property name="owner" type="java.lang.String">
<column name="OWNER" />
</property>
</class>
</hibernate-mapping>
我有一个UserState对象,其中包含一个WorkspaceState。当我做session.saveOrUpdate(userst)时,我看到hibernate已经从我的userst对象中删除了WorkspaceState。然后提交将其保存到DB而不包含workspacestate。
事实上,WorkspaceState本身就有列表,但我怀疑无论我做错了什么都在继续。
由于
编辑 - 它是如何提交的。 HibernateUtil就像它出现在标准的hibernate文档示例中一样:
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
String username = (String) session.merge(state);
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
return false;
} finally {
session.close();
}
答案 0 :(得分:1)
您需要将级联引用更改为save-update并从工作区列表映射中删除反向属性