Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 我可以通过多个查询填充bean中的实体吗?_Java_Hibernate_Jpa - Fatal编程技术网

Java 我可以通过多个查询填充bean中的实体吗?

Java 我可以通过多个查询填充bean中的实体吗?,java,hibernate,jpa,Java,Hibernate,Jpa,假设我有一个实体A,它有一对多的子实体B和C,B和C又有许多子实体,以此类推。我加载一个,并告诉它预取所有子实体,但这需要太长时间。交叉积变得太大。如果我在HQL查询中加载A->B->B的层次结构,或者在查询中加载A->C->C的层次结构,都没有那么糟糕 所以我想加载一个和它的层次结构,但是在多个步骤中,而不是在一个HQL中。目标是将它们全部加载到一个bean中,表示头实体A。Hibernate可以这样做吗?如果是这样,我将如何完成?目前我使用的是查询对象,不太熟悉criteria语言,所以最好

假设我有一个实体A,它有一对多的子实体B和C,B和C又有许多子实体,以此类推。我加载一个,并告诉它预取所有子实体,但这需要太长时间。交叉积变得太大。如果我在HQL查询中加载A->B->B的层次结构,或者在查询中加载A->C->C的层次结构,都没有那么糟糕

所以我想加载一个和它的层次结构,但是在多个步骤中,而不是在一个HQL中。目标是将它们全部加载到一个bean中,表示头实体A。Hibernate可以这样做吗?如果是这样,我将如何完成?目前我使用的是查询对象,不太熟悉criteria语言,所以最好通过HQL,但如果必须的话,我会通过criteria来实现


有人有什么想法吗?

是不是在偷懒加载一个选项?@jhell-不是真的。我们将事务范围限制为服务调用。在离开服务之前,我可以迭代getB()类型的方法来激发负载,但这样我就陷入了N+1的地狱。我目前的问题是,一个查询的笛卡尔乘积太重,但N+1很可能不会更好。所以我在寻找一种平衡。我的对象图的每一半都不是那么糟糕,它们在一起会变得很痛苦。@ElliottFrisch-这个链接似乎是N+1。我很清楚这个性能陷阱,这就是为什么我的项目倾向于让hibernate一次查询所有我们需要的东西。笛卡尔积通常是很容易管理的。但我们现在的情况并非如此。我需要一个介于这两个极端之间的解决方案。如果我可以在一个查询中运行一半的表,然后在下一个查询中运行一半,但是用一个加载的对象呈现代码,这将是理想的。这就是问题所在。