合并休眠集合上的项目



我有这个实体:

@Entity
@Table(name="AA_CHARGE")
public class Charge2 extends AbstractProduct implements Serializable {
    private static final long serialVersionUID = 1L;
    private String currency;
    private String chargeType;
    @OneToMany(mappedBy = "charge")
    private Set<Rate2> chargeRates;
    ...
}
public class Rate2 implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name="RATE_ID")
    private String id;
    private Date startDate;
    private Date endDate;
    private BigDecimal rate;
    private String templateType;
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="CHARGE_ID")
    private Charge2 charge;
    ...
}

我有一个指定的 Charge 对象,其中只有一个元素在 chargeRates 集合上(例如 id A),它保存在数据库中。

在这种情况下,我读取了另一个对象并获得相同的费用,但 chargeRates 集合不相等。(例如,具有 ID B 的费率)。

休眠应该更新我的充电并在收费率中放入 2 个元素吗?在此之后,如果我对数据库进行查询,则出现错误"具有相同标识符值的不同对象已与会话关联"

充电ID是一样的,为什么休眠在这种情况下给出这个错误?谢谢

No Hibernate不会更新您现有的充电对象。因为您没有更新已附加到休眠会话的现有电荷对象。当您创建新的电荷对象休眠时,不知道它的内容是否与已经附加的内容相似,因为两个对象的哈希代码不同。结果你得到了例外。

溶液:
当您看到第二个对象与前一个对象相似时。您只能将新的 chargeRate 对象添加到上一个 charge% 对象的列表中。然后更新对象(更改反映在数据库中)。