小编典典

JPA2 /休眠-停止延迟加载?

hibernate

我遇到了一个问题,JPA试图在我不想要的时候延迟加载我的数据。从本质上讲,正在发生的事情是我正在使用Service检索一些数据,并且当我将这些数据解析为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);
}

是否可以将JPA /hibernate设置为不尝试并延迟加载数据?

更新: 我意识到您可以使用FetchType.EAGER-但是如果我不想急于加载该数据怎么办?我只想停止尝试获取更多数据的hibernate状态-
我已经有了所需的数据。现在,每当我尝试访问get()方法时,hibernate都会抛出“没有会话或会话已关闭”错误,这是有道理的,因为我的事务已经从我的服务中提交了。

谢谢!


阅读 238

收藏
2020-06-20

共1个答案

小编典典

您确实有两个选择:

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

我个人认为,如果您的库仅使用反射,则#1会更容易。

2020-06-20