Hibernate 在刷新之前保存临时实例
异常:对象引用未保存的临时实例-在刷新之前保存临时实例:Child 如何重现问题: 1.Hibernate正在加载实体“父”。属性“child”为空 2.“父对象”在屏幕上呈现,之后“子对象”属性自动实例化。所以我有下面的图表:Hibernate 在刷新之前保存临时实例,hibernate,Hibernate,异常:对象引用未保存的临时实例-在刷新之前保存临时实例:Child 如何重现问题: 1.Hibernate正在加载实体“父”。属性“child”为空 2.“父对象”在屏幕上呈现,之后“子对象”属性自动实例化。所以我有下面的图表: Parent.child != null Parent.child.childId = null Parent.child.childKey = "" Parent.child.childName = "" 问题:当childId=null时,如何强制休眠忽略更新或插
Parent.child != null
Parent.child.childId = null
Parent.child.childKey = ""
Parent.child.childName = ""
问题:当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>
使用“级联”设置。我不知道如何使用xml来实现这一点,但我相信您会在参考资料中找到它使用“级联”设置。我不知道如何使用xml实现这一点,但我相信您会在参考中找到它。据我理解您的问题,您的表示层向显示的父对象添加了一个不必要的子对象,您希望Hibernate忽略它
如果是这样的话,那么表示层似乎有责任摆脱这个孩子。因此,最好在将父对象传递回Hibernate之前,通过删除表示层中的子对象来“清理”父对象。据我所知,您的表示层会将不必要的子对象添加到正在显示的父对象中,您希望Hibernate忽略它
如果是这样的话,那么表示层似乎有责任摆脱这个孩子。因此,最好在将其传递回Hibernate之前,通过移除表示层中的子级来“清理”父级。Spring会自动实例化子对象,如果可能的话,我会保留这个特性。因此,我找到了一种方法,教冬眠者忽略这些对象。@eugenn:再一次:这不是冬眠的责任。如果将不正确的模型传递给持久化层,持久化层将不正确地持久化它。因此,您应该删除控制器中的这些不正确的child。您是对的。Spring会自动实例化子对象,如果可能的话,我会保留这个特性。因此,我找到了一种方法,教冬眠者忽略这些对象。@eugenn:再一次:这不是冬眠的责任。如果将不正确的模型传递给持久化层,持久化层将不正确地持久化它。因此,您应该在控制器中删除这些不正确的child。这不是我所期望的那样有效。hibernate抛出TransientObject异常:抱歉误解了您的问题。我同意axtavt的观点。Hibernate不是这样做的地方。如果你必须的话,你可以考虑拦截者,虽然我不确定他们会为此而工作。这不是我所期望的那样有效。hibernate抛出TransientObject异常:抱歉误解了您的问题。我同意axtavt的观点。Hibernate不是这样做的地方。如果你必须的话,你可以考虑拦截者,虽然我不确定他们会为此而工作。