我最近一直在努力将 3 个表与 spring 数据 jpa 连接起来。我有 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
我无法用 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/