сохраните временный экземпляр перед очисткой - PullRequest
1 голос
/ 08 февраля 2011

Исключение: объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом: дочерний элемент

Как воспроизвести проблему : 1. Hibernate - это загрузка объекта«родитель».Свойство child имеет значение null 2. На экране отображается «Parent», после чего автоматически создается экземпляр свойства «child».Итак, у меня есть следующий график:

Parent.child != null
Parent.child.childId = null
Parent.child.childKey = ""
Parent.child.childName = ""

Вопрос : Как я мог заставить Hibernate игнорировать обновление или вставку дочерней сущности, КОГДА childId = null?Если childId! = Null, я хотел бы просто создать отношения.

<hibernate-mapping>
  <class name="com.test.Parent"
    entity-name="ParentObject" table="parent"
    dynamic-insert="false" dynamic-update="true" optimistic-lock="version">
    <id name="rowId" type="long">
      <column name="RowID" />
      <generator class="native" />
    </id>
    <version name="versionSequence" type="integer"
      unsaved-value="null" generated="never" insert="false">
      <column name="VersionSequence" />
    </version>
    <many-to-one name="child" entity-name="Child" fetch="select"
      optimistic-lock="true" embed-xml="false" update="true" insert="false">
      <column name="ChildID" />
    </many-to-one>
    <property name="dateCreated" type="timestamp">
      <column name="DateCreated" length="0" />
    </property>
    <property name="dateUpdated" type="timestamp" update="false">
      <column name="DateUpdated" length="0" />
    </property>
  </class>
</hibernate-mapping>

<hibernate-mapping>
  <class name="com.Child"
    entity-name="Child" table="Child" dynamic-insert="false"
    dynamic-update="true" optimistic-lock="version">
    <id name="childId" type="long" >
      <column name="ChildID" />
      <generator class="native" />
    </id>
    <version name="versionSequence" type="integer" insert="false"
      generated="never" >
      <column name="VersionSequence" />
    </version>
    <property name="childKey" type="string" >
      <column name="ChildKey" length="20" />
    </property>
    <property name="childName" type="string" >
      <column name="ChildName" length="30" />
    </property>
    <property name="childNumber" type="string" >
      <column name="ChildNumber" />
    </property>
    <property name="dateCreated" type="timestamp">
      <column name="DateCreated" />
    </property>
    <property name="dateUpdated" type="timestamp" update="false">
      <column name="DateUpdated" />
    </property>
  </class>
</hibernate-mapping>

Ответы [ 2 ]

5 голосов
/ 08 февраля 2011

Используйте настройки «Каскад». Не знаю, как это сделать с xml, но я уверен, что вы найдете это в справочнике

2 голосов
/ 08 февраля 2011

Насколько я понимаю ваш вопрос, ваш уровень представления добавляет ненужного дочернего элемента к отображаемому объекту Parent, и вы хотите, чтобы Hibernate игнорировал его.

Если это так, то на уровне представления ответственность за избавление от этого дочернего элемента выглядит как обязанность.Таким образом, было бы лучше "санировать" Parent, удалив этого потомка из уровня представления, прежде чем передать его обратно в Hibernate.

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