Hibernate saveOrUpdate (), кажется, не каскадно создает и сохраняет - PullRequest
3 голосов
/ 22 марта 2012

Я новичок в Hibernate и пытаюсь сохранить «UserState» со списком «WorkspaceState». Объекты UserState обозначаются установленным именем пользователя, а WorkspaceStates задаются схемой UUID. Моя проблема в том, что если у меня есть UserState с одним WorkspaceState, то 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 с одним рабочим пространством. Когда я делаю session.saveOrUpdate (userst), я вижу, что hibernate уже удалил 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 Ответ

1 голос
/ 22 марта 2012

вам нужно изменить каскадную ссылку для сохранения-обновления и удалить обратный атрибут из отображения списка рабочей области

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...