Исключения: объекта ссылается на несохраненный переходный экземпляре - сохранить переходный экземпляр перед промывкой: Ребеноксохранить переходный экземпляр перед промывкой
Как воспроизвести проблему: 1. Гибернации загрузить сущности «Родитель» , Свойство «child» равно null 2. «Родитель» отображается на экране, после чего свойство «child» автоматически создается. Таким образом, у меня есть следующий график:
Parent.child != null
Parent.child.childId = null
Parent.child.childKey = ""
Parent.child.childName = ""
Вопрос: Как я мог заставить Hibernate игнорировать обновления или вставки дочернего объекта Когда childId = нуль? Если 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>
Вы правы. Spring автоматически создает экземпляр дочернего объекта, и, если возможно, я сохраню эту функцию. Поэтому я нахожу способ научить спящий режим игнорировать подобные объекты. – eugenn
@eugenn: Еще раз: это не ответственность Hibernate. Если вы перенесите неверную модель на слой сохранения, слой persistence будет сохраняться неправильно. Поэтому вы должны удалить эти неправильные дочерние элементы внутри контроллера. – axtavt