java - Hibernate 一对多 HashMap 不更新 child

标签 java hibernate orm

我有以下父对象映射到我的数据库中的一个表:

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 时,这些更改尚未保存/更新。

我相信这与父类中 map 的映射有关,但似乎无法弄清楚。任何帮助将不胜感激。

提前致谢。

最佳答案

如果我没理解错的话,您正在修改一个字段,该字段是您实体的主键的一部分。这是非法的:ID 应该是不可变的。

我的建议是遵循良好做法:使用非复合、纯技术、自动生成的主键。一切都会变得更简单(也更快)。

关于java - Hibernate 一对多 HashMap 不更新 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337161/

相关文章:

javascript - coupon.getItemTypes() 不是属于ToMany 的函数

oop - 为什么面向对象模型如此占据/垄断?

java - 为什么在将原始类型分配给泛型类型时不会出现编译器错误?

java - EXTJS - Java 服务器可以调用浏览器前端吗?

c# - SHA1 C# 等效于此 Java

java - 是否可以在没有文档的情况下在 MongoDB 中创建一个集合?

sql - Postgres 获得单个供应商的第一个和最后一个版本

java - JPA 1.0 和 Hibernate 3.4 在锁定时生成 FOR UPDATE NOWAIT

java - Hibernate saveOrUpdate 大数据

mysql - 如何在 sequelize 中按聚合函数排序