休眠从数据库加载一些bean的方式出现问题。
我们使用bean / beanHistoric结构来持久化对该bean所做的所有更改。当我们在bean实例中持久保存某些更改时,我们将使用相同的数据创建一个beanHistoric并将其保存,以使某些设置程序不完全是设置程序。
例如:
@Entity
public class beanHistoric {
List<AnotherBeanHistoric> anotherBeanListH;
@OneToMany(mappedBy="beanHistoric", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@Cascade({org.hibernate.annotations.CascadeType.ALL})
public List<AnotherBeanHistoic> getAnotherBeanList(){
return this.anotherBeanListH;
}
public void setAnotherBeanList(List<AnotherBean> anotherBeanList){
for (AnotherBean anotherBean : anotherBeanList){
anotherBeanListH.add(new AnotherBeanHistoric(anotherBean))
}
}
private void setAnotherBeanListH(List<AnotherBeanHistoric> anotherBeanList){
this.anotherBeanListH = anotherBeanList;
}
}
如您所见,该属性被写入了anotherBeanListH,但是休眠状态是从数据库而不是setAnotherBeanListH调用setAnotherBeanList来填充对象。
任何想法为什么会这样?
最佳答案
您告诉Hibernate,通过注释getter anotherBeanList
将名为getAnotherBeanList()
的属性映射为OneToMany。因此,当从数据库中读取实体时,它通过调用关联的设置器:setAnotherBeanList()
来填充关联。相反将是非常令人惊讶的。如果该属性命名为setBar()
,为什么Hibernate会调用foo
?