我有这个实体:
@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会针对这种情况给出这个错误?感谢
答案 0 :(得分:1)
没有Hibernate不会更新您现有的充电对象。因为您没有更新已经附加了hibernate会话的现有计费对象。当你创建新的充电对象时,hibernate不知道它的内容是否与已经附加的内容相似,因为,两个对象的哈希码不相同。结果你得到了异常。
解决方案:
当您看到第二个对象与前一个对象相似时。您只能将新的chargeRate对象添加到上一个充电对象的列表中。然后更新对象(更改反映在数据库中)。