2

我有一个实体,其字段与另一个标记为惰性的对象相关

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

但是在jsp文件中,当它引用填充输入时,输入什么也没显示。我怎样才能在需要的地方强制获取这个字段?

谢谢,

4

1 回答 1

3

最简单的做法是从 @ManyToOne 中删除 Lazy 属性,默认情况下它通常是渴望的,这与通常是惰性的 @OneToMany 不同。

在这种情况下,您当然可能有理由避免在默认情况下急切获取,因此您还可以通过为该特定用例指定加载实体的查询来启用该特定用例的急切获取。

见 15.5

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

方法的一个问题是您最终可能会在代码中使用各种方法,例如 loadCustomer()、loadCustomerWithOrders() 等。

替代方法是使用 OpenSessionInView/OpenEntityManagerInView 模式,该模式保持 Hibernate Session 处于打开状态,直到您的视图被渲染或使用 Value Objects/DTOS。

就我个人而言,我更喜欢使用 OSIV,一旦发现任何性能问题,我就会根据需要进行优化。

于 2013-10-28T14:08:20.737 回答