JPA2/Hibernate - 停止延迟加载?

Bri*_*asa 9 java hibernate jpa gson

我遇到了一个问题,即JPA在我不想要的时候试图懒洋洋地加载我的数据.基本上发生的事情是我正在使用服务来检索一些数据,当我将这些数据解析为JSON时,JSON库正在触发hibernate尝试并且懒洋洋地加载数据.有没有办法阻止这个?我在下面给出了一个例子.

// Web Controller method
public String getEmployeesByQuery(String query) {

    Gson gson = new Gson();
    List<Employee> employees = employeeService.findEmployeesByQuery(query);

    // Here is where the problem is occurring - the gson.toJSON() method is (I imagine)
    // using my getters to format the JSON output, which is triggering hibernate to
    // try and lazily load my data...
    return gson.toJSON(employees);
}
Run Code Online (Sandbox Code Playgroud)

是否可以将JPA/hibernate设置为不尝试并且懒惰地加载数据?

更新:我意识到你可以使用FetchType.EAGER - 但如果我不想急于加载那些数据呢?我只想阻止hibernate尝试检索更多数据 - 我已经拥有了我想要的数据.现在每当我尝试访问get()方法时,hibernate都会抛出"no session或session is closed"错误,这是有道理的,因为我的事务已经从我的服务中提交了.

谢谢!

axt*_*avt 7

有几种选择:

  • 如果您总是需要急切地加载您的集合,您可以fetch = FetchType.EAGER在映射中指定,如其他答案中所建议的那样.

  • 否则,您可以为特定查询启用急切提取:


Rug*_*ggs 4

你确实有两个选择:

  1. 您可以将员工的数据复制到未由 hibernate 代理的数据。
  2. 看看是否有办法不让toJSON库反映整个对象图。我知道一些 JSON 库只允许您将对象的某些属性序列化为 JSON。

就我个人而言,我认为如果你的库只使用反射,#1 会更容易。