我遇到了一个问题,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都会抛出“没有会话或会话已关闭”错误,这是有道理的,因为我的事务已经从我的服务中提交了。
谢谢!
您确实有两个选择:
toJSON
库反映整个对象图的方法。我知道一些JSON库仅允许您将对象的某些属性序列化为JSON。我个人认为,如果您的库仅使用反射,则#1会更容易。
问题内容: 我正在使用Spring事务,因此当POJO到DTO转换时,该事务仍然处于活动状态。 我想防止Dozer触发延迟加载,以使隐藏的sql查询永远不会发生:所有获取都必须通过HQL显式完成(以获得对性能的最佳控制)。 这是一个好习惯吗(我在任何地方都找不到它)? 如何安全地做? 我在DTO转换之前尝试了这个: 我不知道事务会发生什么,但是Hibernate会话不会关闭,并且仍然会发生延迟加载
问题内容: 我遇到了 一个 问题,即 一对一的延迟加载 在hibernate状态下不起作用。我 已经解决了它 ,但仍然 无法 正确 理解 会发生什么。 我的代码( 延迟加载在这里不起作用 ,当我拉人时-地址也被获取): 但是 :如果我添加 OneToOne关系,则延迟加载 效果很好 ! 问题/完整性: 请向我解释注释如何帮助实现延迟加载。 PS 我已经阅读了post1和post2的帖子,并了解了为
问题内容: 我在spring使用Hibernate。 我有这样的模型班。 它通常可以正常工作,但是Category不会延迟加载,而是在ForumEntry加载后急切加载。 `` 完全没有将getter称为ForumCategory是在ForumTopic之后立即加载的。 这个问题出现在我所有的@ManyToOne关联中。但是,@OneToMany关联会延迟加载。 我正在使用maven2进行构建。这
问题内容: 我的多对一映射存在性能问题。当我在日志文件中调试SQL查询时,可以进行主体查询,但是在我有其他表示多对一对象映射的查询之后。 Entity.hbm.xml: Object1.hbm.xml: Object2.hbm.xml: 查询HBM: 在pom.xml中 问题答案: 您是否尝试过像这样的FetchMode.SELECT?
延迟异步函数的执行。 延迟执行 async 函数的一部分,通过把它放到 sleep 状态,返回一个 Promise 。 const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); async function sleepyWork() { console.log("I'm going to sleep for 1
问题内容: 我相信只有两种使用Hibernate加载对象的方法,即延迟加载和一种渴望加载。延迟加载有其自身的优势,它不会加载很多对象,而只是在需要时才加载它们。我还了解到,如果您想强制为一个对象加载所有子代,则只需调用即可。假设我们有以下对象 假设我们有一些客户在我们的系统中有订单,并且该订单可能不止一个甚至为空。所以我的问题是,在这种情况下始终使用渴望加载会更好吗?我们需要与客户相关的订单的大小