【问题标题】:Entity JOIN using Spring Data Specification使用 Spring 数据规范的实体 JOIN
【发布时间】:2018-04-07 10:54:28
【问题描述】:

我目前正在处理 Spring Data JPA 规范。我遇到了以下问题:How can I define the following SQL Join with just JPA Specifications?

SELECT * FROM competition c
   LEFT JOIN participation p ON c.id = p.competition_id
   LEFT JOIN team t ON p.team_id = t.id
   WHERE t.name = 'WDB'

请注意,CompetitionParticipationTeam 是 JPA 实体 (@Entity)!

【问题讨论】:

标签: spring hibernate spring-data-jpa specifications jpa-criteria


【解决方案1】:

JPQL 查询可能如下所示;

SELECT c FROM competition c 
LEFT JOIN c.participation p
LEFT JOIN p.team t
WHERE t.name = 'WDB'

以上假设根据问题的原始描述,实体的定义如下(访问器和其他细节省略)。

@Entity
public class Competition
@ManyToOne
public List<Participation> participation;

@Entity
public class Participation
@ManyToOne
public List<Team> team;

@Entity
public class Team
private String name;

如果您的返回对象不是 Competition 或其他实体对象,那么您可以定义另一个传输类并利用 JPQL 的 NEW 操作返回它的一个实例。

【讨论】:

  • 非常感谢您的回复。不幸的是,我已经在使用命名的 JPQL 查询。这就是为什么我想用规范来实现它。
  • 没有 Spring Data 规范之类的东西,Spring Data 是一种库/框架/实用程序编程模型,位于各种持久性技术之上,其中一个是 JPA。因此,在 Spring Data 的上下文中,您可以将 JPQL 查询作为存储库方法上的“@Query”注释的值,或者如果您想要 NativeQueries 等,您可以使用任何其他 JPA 功能。特别是查看 Spring Data 示例至:github.com/spring-projects/spring-data-examples/blob/master/jpa/…
猜你喜欢
  • 2016-11-05
  • 2020-06-20
  • 2023-01-31
  • 2020-02-29
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
相关资源
最近更新 更多