hibernate强制在需要时获取惰性字段

时间:2013-10-28 13:25:18

标签: hibernate lazy-evaluation

我有一个实体,其字段与另一个标记为lazy

的对象相关
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "fk_prs_insured")
    public Person getInsured() {
        return insured;
    }

但是在jsp文件中,当它引用填充输入时,输入什么都没有显示。 如何强制在需要的地方获取此字段?

感谢,

1 个答案:

答案 0 :(得分:3)

最简单的方法是从@ManyToOne中删除Lazy属性,这些属性通常是默认情况下的,而不像@OneToMany通常是懒惰的。

在这种情况下,你当然有理由避免急于获取默认情况,因此你也可以通过指定一个提取提示你的查询加载这个特定用例的实体来启用对这个特定用例的Eager提取。 p>

见15.5

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

方法的一个问题是你可以在代码中使用各种方法,例如loadCustomer(),loadCustomerWithOrders()等。

替代方法是使用OpenSessionInView / OpenEntityManagerInView模式,该模式保持Hibernate会话打开,直到您的视图已呈现或使用Value Objects / DTOS。

我个人更喜欢使用OSIV,并在确定任何性能问题后根据需要进行优化。