2011-12-01 63 views
3

我必須映射到一個表在我的數據庫下面的父對象:Hibernate的一個一對多的HashMap不更新對兒童

public Parent { 
    private Long id; 
    private String mid; 
    private Integer days; 
    private BigDecimal fee; 
    private DateTime createdDate = new DateTime(); 
    private DateTime lastModifiedDate; 

    private Map<String, Child> children; 
} 

用下面的.hbm.xml:

<hibernate-mapping default-access="field"> 
    <class name="Parent" table="parent_table"> 
     <id column="id" length="50" name="id" unsaved-value="null"> 
      <generator class="increment"/> 
     </id> 
     <property length="50" name="mid"/> 
     <property name="days"/> 
     <property name="fee"/> 
     <property name="createdDate" type="(...)PersistentDateTime"/> 
     <property name="lastModifiedDate" type="(...)PersistentDateTime"/> 
     <map cascade="all-delete-orphan" inverse="true" name="children" > 
      <key column="parentId" /> 
      <map-key column="country" type="string" /> 
      <one-to-many class="Child" /> 
     </map> 
    </class> 
    </hibernate-mapping> 

子對象如下:

public class Child implements Serializable { 
    private Long parentId; 
    private String country; 
    private String cu; 
} 

用下面的.hbm.xml:

<hibernate-mapping default-access="field"> 
<class name="Child" table="child_table"> 
    <composite-id> 
     <key-property name="parentId"/> 
     <key-property name="country"/> 
     <key-property name="cu"/> 
    </composite-id> 
</class> 
</hibernate-mapping> 

通過從我的數據庫獲取父對象後:

getSession().createCriteria(Parent.class) 
          .add(Restrictions.eq("mid", mid)) 
          .uniqueResult(); 

使得在孩子一些變化Child.cu映射後,我調用父對象的saveOrUpdate。這樣做後,所有似乎保存/更新正常,但檢查數據庫中的child_table,這些更改尚未保存/更新。

我相信這與父類中地圖的映射有關,但似乎無法弄清楚。任何幫助,將不勝感激。

在此先感謝。

回答

1

如果我理解正確,那麼您正在修改屬於您實體主鍵的字段。這是非法的:ID應該是不可變的。

我的建議是遵循良好實踐:使用非複合純技術的自動生成的主鍵。一切都會更簡單(也更快)。

相關問題