在Spring Jpa Data中加入3个表

Roc*_*dis 6 spring jpa join

我最近一直在努力用spring数据jpa加入3个表.我有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
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*hum 7

这更像是一个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;
}
Run Code Online (Sandbox Code Playgroud)

查询很简单:

select s.dossiers.items from Series s where s.projectId = :param
Run Code Online (Sandbox Code Playgroud)

或者,如果仅使用@ManyToOnes并省略@OneToManys 更合理,则查询仍然是直截了当的:

from Item where i.dossier.series.projectId = :param
Run Code Online (Sandbox Code Playgroud)