0

我有这个实体:

@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 的费率)。

hibernate 是否应该更新我的 Charge 并将 2 个元素放入 ChargeRates 中?在此之后,如果我对数据库进行查询,则会收到错误消息“具有相同标识符值的不同对象已与会话相关联”

Charge id 是一样的,为什么hibernate会针对这种情况报这个错误呢?谢谢

4

1 回答 1

1

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

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

于 2012-11-19T13:33:21.440 回答