Hibernate saveOrUpdate()似乎没有级联创建和保存

时间:2012-03-21 22:58:18

标签: java database hibernate

我是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();
}

1 个答案:

答案 0 :(得分:1)

您需要将级联引用更改为save-update并从工作区列表映射中删除反向属性