Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 急切地初始化子集合休眠_Hibernate_Jpa_Jpql - Fatal编程技术网

Hibernate 急切地初始化子集合休眠

Hibernate 急切地初始化子集合休眠,hibernate,jpa,jpql,Hibernate,Jpa,Jpql,我有一个类A,它有B的集合:列表bList。另外,B类有C的集合:列表cList 问题:如何在初始化所有集合的情况下获取对象 此NamedQuery工作不正确(它返回许多重复的B): 使用选择不同的a而不是选择a。它将删除结果中的所有重复条目。你的问题是: SELECT DISTINCT a FROM A a LEFT JOIN FETCH a.bList bList LEFT JOIN FETCH bList.cList WHERE a.id = (:id) 你的问题很好。Fetch

我有一个类
A
,它有
B
的集合:
列表bList
。另外,
B
类有
C
的集合:
列表cList

问题:如何在初始化所有集合的情况下获取对象

NamedQuery
工作不正确(它返回许多重复的B):


使用选择不同的a而不是选择a。它将删除结果中的所有重复条目。你的问题是:

SELECT DISTINCT a FROM A a 
LEFT JOIN FETCH a.bList bList 
LEFT JOIN FETCH bList.cList 
WHERE a.id = (:id)

你的问题很好。Fetch join应具有重复项。你需要处理这些问题。看这里:我不确定这是否有效@Alan Hay:当我们在HQL中使用DISTINCT关键字时,它不会强制数据库过滤不同的对象。相反,当resultset被编组到对象中时,重复项的过滤在内存中发生。当然,这种机制会减慢进程,因为它需要处理内存中的重复条目,但至少从用户的角度来看,返回的结果是我们所期望的。很抱歉,它不起作用。它仍然返回重复项。(很抱歉,上面的查询只会删除实例的重复项,但我在
bList
中有重复项。Thanks@user3005451.很公平,但这并不能解决问题。如果不改变应用程序的语义,您可以在B和C的集合中从
List
更改为
Set
,以消除重复。
SELECT DISTINCT a FROM A a 
LEFT JOIN FETCH a.bList bList 
LEFT JOIN FETCH bList.cList 
WHERE a.id = (:id)