gpt4 book ai didi

java - Hibernate 一对多 HashMap 不更新 child

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:59 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com