[英]JPA: How to fetch one entity's children given ID of other entity in many-to-many relationship?
[英]How to fetch many-to-many relationship entity
我有以下表格结构
TABLE1
T1_ID
T1_Col1
TABLE2
T1_ID
T3_ID
TABLE3
T3_ID
T3_COL1
Table1
和Table3
由中间表连接,即Table2
。 现在,我只有T1_ID
,我想获取所有行从Table3
,其与关联T1_ID
。 一个简单的 SQL 查询是
select T1.*, T3.*
from TABLE1 T1, TABLE T2, TABLE3 T3
where T1.T1_ID = T2.T1_ID
and T2.T3_ID = T3.T3_ID
那么我如何在 hibernate/jpa 中做到这一点......我还没有为Table1
, Table2
, Table3
编写我的实体类。 我想将此查询作为Table1
一部分执行,以便我可以编写一个方法,比如entity.fetchAssociatedTable3()
。 我能想到的最简单的方法是在fetchAssociatedTable3
我可以像上面提到的那样放置自定义查询。 但是由于我使用的是 hibernate/jpa,我想知道是否有更好的方法来做到这一点。
更新显然,我的问题还不够清楚。 我想做一些用户 Dragan Bozanovic 提到的事情。 但是,我想知道的是
我将如何编写Table1
实体? 我的意思是我会在列等上添加哪些注释,这将使 hibernate/jpa 了解该列通过Table2
与Table3
列相关
我想如果问题 1 得到了回答,那么编写getEntity3s()
方法就会很困难。 但是,如果(对于菜鸟)有什么我需要知道的,我将不胜感激。
假设你将有之间的许多一对多关联Entity1
(映射到TABLE1
)和Entity3
(映射到TABLE3
),您可以:
1) 通过 id 读取Entity1
并从中获取所有Entity3
:
Entity1 entity1 = entityManager.find(Entity1.class, entity1Id);
Collection<Entity3> entity3s = entity1.getEntity3s();
2) 或者,执行 JPQL 查询以获取Entity3
而不加载Entity1
实例:
select distinct e3 from Entity3 e3 join Entity1 e1 where e1.id = :entity1Id
您需要做的第一件事是在使用 ORM 工具(Hibernate/JPA)时停止考虑表格。 您可以对类及其关系建模,并让 ORM 工具以声明方式帮助进行映射。 您的连接表只是在这里用于在两个实体之间创建多对多关系。 因此,就类而言,您将只有 Entity1 和 Entity3。 您不会创建表示连接表的类(除非您当然希望它具有外键以外的其他属性,在这种情况下,它本身就有资格成为实体类)。 然后您可以使用@Dragan 建议的任何一种方法,即通过主键加载或使用显式 HQL/JPQL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.