繁体   English   中英

如何获取多对多关系实体

[英]How to fetch many-to-many relationship entity

我有以下表格结构

TABLE1
  T1_ID
  T1_Col1

TABLE2
  T1_ID
  T3_ID

TABLE3
  T3_ID
  T3_COL1

Table1Table3由中间表连接,即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 中做到这一点......我还没有为Table1Table2Table3编写我的实体类。 我想将此查询作为Table1一部分执行,以便我可以编写一个方法,比如entity.fetchAssociatedTable3() 我能想到的最简单的方法是在fetchAssociatedTable3我可以像上面提到的那样放置自定义查询。 但是由于我使用的是 hibernate/jpa,我想知道是否有更好的方法来做到这一点。

更新显然,我的问题还不够清楚。 我想做一些用户 Dragan Bozanovic 提到的事情。 但是,我想知道的是

  1. 我将如何编写Table1实体? 我的意思是我会在列等上添加哪些注释,这将使 hibernate/jpa 了解该列通过Table2Table3列相关

  2. 我想如果问题 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM