0

我是 JPA 的新手,我使用 Hibernate 和 Spring 创建了一个示例应用程序。从各种帖子和谷歌中,我发现很少有实现 LAZY fetch 的方法。

  • 一种讨论最多的方法似乎是视图模式中的开放会话,尽管许多人提出了这种方法的各种缺点。
  • 另一种方法是使用联接查询(例如select p from Partner p join fetch p.contacts where...)。

请解释我可能选择的首选实施方式。谢谢。

4

1 回答 1

2

好的方法是第二种方法。

Open session in view 模式是一种反模式实践。它提供了在 JSP/Servlet 级别更改实体的机会。这对数据不安全,并且是一种糟糕的编程习惯。

首选方法是在使用实体之前手动加载实体的延迟加载字段,或者在 HQL 语句中使用fetch保留字。您将在视图层中使用什么/哪些数据是您自己应该提前知道的事情,因此在使用它们之前准备/加载数据是您的职责,这是常识。

以下是一些提前加载延迟加载字段的方法:

  1. 设置fetch模式,查询时急切获取字段值

    Criteria.setFetchMode(String associationPath, FetchMode 模式);

  2. Hibernate.initialize()方法来初始化代理字段。

  3. 在 HQL 语句中添加fetch 。

    从 Employee 中选择 emp 作为 emp 提取加入 emp.dept 作为部门 where dept.name like 'HR'

于 2013-03-06T13:58:15.870 回答