spring - 在 Spring Jpa 数据中加入 3 个表

标签 spring jpa join

我最近一直在努力将 3 个表与 spring 数据 jpa 连接起来。我有 3 个实体,Series , DossierItem . Series有很多Dossiers , 和 Dossier有很多Items (关系)。我做类似 Series.join(Dossier_.series).join(Dossier_.items) 的事情我最终得到了一个连接集。我想进行以下查询:

Select Items from Series,Dossier,Item 
Where Series.Id=Dossier.seriesId 
and Dossier.id=Item.dossierId 
and series.projectId = :param

我无法用 Spring 规范和标准 api 表达这个声明......请阐明

最佳答案

这更像是一个 JPA 问题。

首先,我总是强调,您不能访问“表格”。您应该将它们视为域实体。许多 JPA/Hibernate/其他 ORM 的误用实际上来自 SQL 或数据库概念的直接“翻译”。

回到你的问题,答案很简单。首先确保您的域实体中确实存在“关系”。存储 ID 无助于构建具体的域模型。例如,你有类似的东西:

@Entity
class Series {
  @Id
  Long id;

  @OneToMany(mappedBy="series")
  List<Dossier> dossiers;
}
@Entity
class Dossier{
  @Id
  Long id;

  @ManyToOne
  Series series;

  @OneToMany(mappedBy="dossier"
  List<Item> items;
}

@Entity
class Item{
  @Id
  Long id;

  @ManyToOne
  Dossier dossier;
}

查询很简单:
select s.dossiers.items from Series s where s.projectId = :param

或者,如果只有 @ManyToOne 更合理s 并省略 @OneToMany s,查询仍然很简单:
from Item where i.dossier.series.projectId = :param

关于spring - 在 Spring Jpa 数据中加入 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572981/

相关文章:

java - 如何在 finally block 的事务上下文中处理异常?

java - spring aop的advices中value属性和切入点属性有什么区别

java - 基于 Tomcat 7 的 Spring 应用程序是否可以立即移植到 JBoss EAP6?

database - 不从搜索查询中检索任何数据

java - Eclipselink:如何检查是否使用了连接池

java - entity.merge后如何获取主键

mysql - 左连接可交换吗?它有什么属性?

mysql - 有限制地检索评论和回复

mysql - SQL查询问题-有六个表的困难查询

spring - 通过 springs `WebClient` 进行api调用但忽略结果的正确方法是什么?