我最近一直在努力用spring数据jpa加入3个表.我有3个实体Series,Dossier和Item.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表达这个声明....请说清楚
这更像是一个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)
| 归档时间: |
|
| 查看次数: |
15837 次 |
| 最近记录: |