合并Hibernate集合上的项目

时间:2012-11-19 13:05:28

标签: java database hibernate jpa

我有这个实体:

@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;

    ...
}

我有一个指定的充电对象,只有 chargeRates集合上的元素(例如ID为A),并保存在数据库中。

在这种情况之后,我读了另一个对象并得到相同的费用,但 chargeRates集合不等于。 (例如,具有身份B的比率)。

hibernate应该更新我的Charge并在chargeRates中放入2个元素吗? 在此之后,如果我对数据库进行查询,我得到一个错误“具有相同标识符值的另一个对象已经与会话相关联”

充电ID是一样的,为什么hibernate会针对这种情况给出这个错误?感谢

1 个答案:

答案 0 :(得分:1)

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

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