如何在Hibernate中跨集合隐式连接?

如何在Hibernate中跨集合隐式连接?,hibernate,orm,Hibernate,Orm,对象结构如下所示- Entity A - Collection <B> Entity B - Collection <C> Entity C -Collection <D> Entity D CompositePrimaryKey Class CompositePrimaryKey String id; 实体A -收藏 实体B -收藏 实体C -收藏 实体D 复合主密钥 类CompositePrimaryKey 字符串id; 在

对象结构如下所示-

Entity A
  - Collection <B>

Entity B
  - Collection <C>

Entity C
  -Collection <D>

Entity D
  CompositePrimaryKey

Class CompositePrimaryKey
  String id;
实体A
-收藏
实体B
-收藏
实体C
-收藏
实体D
复合主密钥
类CompositePrimaryKey
字符串id;
在HQL中,查询类似于A中的,其中A.B.C.D.CompositePrimaryKey.id='input'

我得到下面的例外-

org.hibernate.QueryException:取消引用集合的非法尝试

基本上,这是跨集合的隐式连接。 这样做的正确方法是什么

我希望通过集合获取所有数据-基于id值


谢谢。

据我所知,HQL无法撤销这一复杂案件。您需要将子集合的映射指定为
fetch=“join”
,并手动编写一个大的HQL联接:

from A_table a, B_table b, C_table c, D_table d
  where a.b_id = b.id and b.c_id = c.id and c.d_id = d.id and d.id = 'input'
一个好的解决方案是为实体
A
(过滤器使用表列进行操作):


...
我收到(…)异常org.hibernate.QueryException:非法尝试取消引用集合

路径表达式
a.B.C.D
是非法的,因为B(以及C和D)是一个集合

基本上,这是跨集合的隐式连接。这样做的正确方法是什么

使用显式联接:

from A a join a.B b join b.C c join c.D d where d.pk.id = :id

我使用了过滤逻辑,它可以很好地满足我的要求,谢谢。我更喜欢这种连接语法,而不是旧的where子句连接语法。
from A a join a.B b join b.C c join c.D d where d.pk.id = :id