java - 如何获取多对多关系实体

标签 java mysql hibernate postgresql jpa

表结构如下

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 理解该列通过 Table2

  2. Table3 列相关
  3. 我想如果问题 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

关于java - 如何获取多对多关系实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32591375/

相关文章:

java - 如何在JFrame上放置多张图片?

PHP 无法从 ActionScript3 接收参数

java - @ManyToOne 与连接表的关系(nullable = false)

java - 异常处理无限循环

java - Mockito 太多实际调用

java - native 混合 Java 代码如何实现平台无关?

mysql - 如何在 MySQL 中选择文件名的子字符串?

php - 换页时可以发送数据吗[分页]

java - Hibernate 实体映射

java - Hibernate 中的多对多关系不返回结果