Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate通过无状态会话保存延迟获取的实体_Java_Hibernate_Jpa_Playframework - Fatal编程技术网

Java Hibernate通过无状态会话保存延迟获取的实体

Java Hibernate通过无状态会话保存延迟获取的实体,java,hibernate,jpa,playframework,Java,Hibernate,Jpa,Playframework,出于优化目的,我想用hibernate无状态会话更新一些实体 然而,这些实体是从“经典”会话加载的(我需要缓存特性来更快地加载实体)。 所有这些都很好,但是我的一些实体是延迟初始化的,因此它们的类名类似于:myentity\u$$\ ujavassist\u22。因此,我的无状态会话不想更新我的实体 有没有办法将延迟初始化的实体转换为加载的实体 谢谢如果您在将所有延迟加载的实体交给无状态会话之前手动获取它们,那么它将工作(不再有代理)。但是它可能会花费很多,因为它会生成许多查询来加载完整的对象图

出于优化目的,我想用hibernate无状态会话更新一些实体

然而,这些实体是从“经典”会话加载的(我需要缓存特性来更快地加载实体)。 所有这些都很好,但是我的一些实体是延迟初始化的,因此它们的类名类似于:
myentity\u$$\ ujavassist\u22
。因此,我的无状态会话不想更新我的实体

有没有办法将延迟初始化的实体转换为加载的实体


谢谢

如果您在将所有延迟加载的实体交给无状态会话之前手动获取它们,那么它将工作(不再有代理)。但是它可能会花费很多,因为它会生成许多查询来加载完整的对象图

或者在使用Hibernate.initialize(lazyEntity)之前获取它们,或者使用代理终止方法终止它们(但是您将保存null:可能这不是您想要的)

检查关于Hibernate无状态会话的另一个问题,看看它是否是解决问题的好方法

我在查询中使用left-join-fetch获取它们,但其中一些仍然是延迟加载的(可能是因为缓存)。此外,我知道我的实体(延迟加载的实体)在缓存中,因为当我访问它们时,不会再进行查询。所以,我不知道如何取回它们,因为我正在竭尽全力取回它们。这就是为什么我想知道是否可以手动加载它们,以便在无状态会话中使用它们。顺便说一句,我需要一个无状态会话,因为批处理将使我清除缓存,我需要缓存,以便我的应用程序Hibernate的下一步。初始化(对象)是强制加载惰性实体的一种方法。但我认为在一个查询中完全加载图形可能更好(逻辑上性能更好)。您最终可以使用本机查询或Hibernate的worker API为其定义自定义SQL查询。这已经是我正在做的(在一个查询中完全加载),但由于缓存的原因,一些子项没有完全加载(我得到代理类)。这就是为什么我一直在寻找一个手动加载它们的解决方案(由于实体在缓存中,所以不执行查询,所以速度很快)。初始化(对象)确实是解决方案,它对我有效,我的代码快了12倍。我会将您的答案标记为正确答案,并对其进行编辑,以添加一个帮助我使用Hibernate.initialize()的链接(因为仅此函数还不够)