Я новичок в 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();
}