我是JPA的新手,并使用Hibernate和Spring创建了一个示例应用程序。从各种帖子和谷歌我发现很少有方法来实现LAZY fetch。
select p from Partner p join fetch p.contacts where...
)。请解释我可能选择的首选实施方式。 感谢。
答案 0 :(得分:2)
好方法是第二种方式。
在视图模式中打开会话是一种反模式练习。它提供了在JSP / Servlet级别更改实体的机会。这对数据来说并不安全,而且是一种糟糕的编程习惯。
要求的方法是在使用实体之前手动加载实体的延迟加载字段,或者在HQL语句中使用 获取 保留字。您将在视图层中使用哪些/哪些数据是您应该事先知道的事情,因此在使用之前准备/加载数据的责任是您的,这是常识性的事情。
以下是一些提前加载延迟加载字段的方法:
设置提取模式以在查询时急切地获取字段值
Criteria.setFetchMode(String associationPath,FetchMode mode);
Hibernate.initialize()方法初始化代理字段。
在HQL语句中添加 fetch 。
从员工中选择emp作为emp取件加入emp.dept作为dept.name如'HR'