gpt4 book ai didi

java - JPA2/Hibernate - 停止延迟加载?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:37 24 4
gpt4 key购买 nike

我遇到了一个问题,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);
}

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

更新:我知道您可以使用 FetchType.EAGER - 但如果我不想预先加载该数据怎么办?我只想阻止 hibernate 尝试检索更多数据——我已经有了我想要的数据。现在,每当我尝试访问 get() 方法时,hibernate 都会抛出“无 session 或 session 已关闭”错误,这是有道理的,因为我的事务已经从我的服务中提交。

谢谢!

最佳答案

有几个选项:

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

  • 否则,您可以为特定查询启用预先获取:

    • 在 HQL/JPQL 查询中使用 JOIN FETCH 子句:

      SELECT e FROM Employee e JOIN FETCH e.children WHERE ...
    • 通过使用 fetch profiles (在 JPA 中,您可以通过 em.unwrap(Session.class) 访问 Hibernate Session)

关于java - JPA2/Hibernate - 停止延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com