冲洗

2011-02-08 79 views
1

异常之前保存的瞬态的实例:对象引用一个未保存的瞬态的实例 - 冲洗之前保存的瞬态的实例:儿童冲洗

如何重现问题: 1. Hibernate是加载实体“家长” 。属性“child”为空 2.“父”在屏幕上呈现,然后“child”属性自动实例化。所以,我有如下图:

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

问题:我怎么能强迫休眠忽略更新或插入儿童实体WHEN 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

据我了解你的问题,你的表示层为正在显示的Parent对象添加了一个不必要的子元素,你希望Hibernate忽略它。

如果是这样,它看起来像表达层的责任,摆脱那个孩子。因此,在将它传递回Hibernate之前,通过在表示层中删除该子代来“消毒”Parent会更好。

4

使用'级联'设置。不知道如何用xml做到这一点,但我相信你会在参考文献中找到它

+0

它不工作,因为我期望。 hibernate抛出TransientObjectException: – eugenn 2011-02-08 15:47:26

+0

很抱歉误解了你的问题。我同意axtavt。 Hibernate是做错的地方。如果你肯定,你可能会考虑拦截器,尽管我不确定他们会为此工作。 – 2011-02-09 03:14:54