Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 如何防止休眠加载线_Java_Hibernate - Fatal编程技术网

Java 如何防止休眠加载线

Java 如何防止休眠加载线,java,hibernate,Java,Hibernate,我目前正处于一个可能达到极限的情况中 我正在使用Java和Hibernate3进行ORMapping。由于我在开发遗留代码,重构不可能那么容易。特别是我所说的可选实体可能是通过继承开发的,但今天的情况并非如此 我有一个RootEntity(R),它有两个可选的实体(a)和(B)。至少有一个实体是根实体的子实体: (A)(B) 我的配置文件强制加载集合,条件定义别名。我最终得到了一个非常长的查询,确实用所有必要的元素加载所有行: (R)cols。。。(A) 科尔斯。。。(B) cols… 我使用H

我目前正处于一个可能达到极限的情况中

我正在使用Java和Hibernate3进行ORMapping。由于我在开发遗留代码,重构不可能那么容易。特别是我所说的可选实体可能是通过继承开发的,但今天的情况并非如此

我有一个RootEntity(R),它有两个可选的实体(a)和(B)。至少有一个实体是根实体的子实体:

(A)(B)

我的配置文件强制加载集合,条件定义别名。我最终得到了一个非常长的查询,确实用所有必要的元素加载所有行:
(R)cols。。。(A) 科尔斯。。。(B) cols…

我使用Hibernate源代码进入调试模式,当找到时,我将正确地构造(R)、(A)或(B)

问题:在水合阶段后,Hibernate将无法找到其中一个实体。如果A已经加载,它将尝试加载B;如果B已加载,它将尝试加载A

这将导致以下每一行的可选查询:
-不能检索任何行
-可能检索到一些不必要的行(外键ID会有一些对应,但不会在应用程序中使用)

问题:如何告知Hibernate“基于行和类型(R)忽略加载不需要的实体(A)或(B))”


提前感谢

我能想到的唯一方法是让加载变慢,并在
R
上使用
@PostLoad
方法强制加载。这听起来很合理,但我的主要目标是在一个查询中加载所有内容,从而避免不必要的数据库加载。无论如何,使用这种解决方案的查询数量不会高于当前解决方案。您是否考虑过使用@DiscriminatorColumn来区分A和B?