Hibernate saveOrUpdate()方法似乎不能级联创建和保存。

3
我是新手使用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已经将WorkspaceState从我的userst对象中删除。然后提交操作会将其保存到数据库中,但不包括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();
}

你能提供一些关于如何执行提交的代码吗? - bsimic
我在原始帖子的末尾添加了一个片段。谢谢。 - Goren
1个回答

1

你需要将级联引用更改为保存-更新,并从工作区列表映射中删除反向属性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接