如何在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