表结构如下
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
与 我想如果问题 1 得到了回答,那么
getEntity3s()
方法就很难写了。但是,如果(对于菜鸟)有什么我需要知道的,我将不胜感激。
Table3
列相关
最佳答案
假设您将在 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
关于java - 如何获取多对多关系实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32591375/