休眠从数据库加载一些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

10-06 09:10