如何使用 Spring Data JPA 连接两个表
Posted
技术标签:
【中文标题】如何使用 Spring Data JPA 连接两个表【英文标题】:How to join two tables using Spring Data JPA 【发布时间】:2017-11-08 11:16:52 【问题描述】:我有两个类似于以下的实体:
Doctor:
@Id
@Column(name = "ID", nullable = false, updatable = false)
private Long id;
...
DoctorSpeciality:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false, updatable = false)
private Long id;
@ManyToOne
@JoinColumn(name = "DOCTOR_ID")
private Doctor doctor;
@ManyToOne
@JoinColumn(name = "SPECIALITY_ID")
private Speciality speciality;
我想加入这些,通过 DoctorRepository 使用 JPA 规范检索给定 SpecialityId 的所有医生。
有人可以帮我解决这个问题吗?
【问题讨论】:
FWIW 没有“JPA 规范”或“JPA 存储库”或“JPA 查询”之类的东西。那就是 Spring Data JPA (!= JPA API)。标签固定 【参考方案1】:在你的DoctorRepository
试试这个
@Query("Select d from Doctor d where d.speciality.id = :id")
List<Doctor> findAllBySpeciality(@Param("id") long id);
更新 1:使用您提供的映射,以下 JPQL 正在运行。
@Query("Select ds.doctor from DoctorSpeciality ds where ds.speciality.id = :id")
List<Doctor> findAllBySpeciality(@Param("id") long id);
【讨论】:
我已成功运行此查询:select * from doctor join doctor_speciality on doctor.id= doctor_speciality.doctor_id where doctor_speciality.speciality_id=2 但我想使用 JPA 规范实现同样的目标。 @Ganesan 检查更新的答案。此 JPQL 正在我的机器上成功运行。 我上面说的查询工作正常。但我想通过这样的规范来做到这一点:public static Specification<Doctor> findBySpeciality(Speciality speciality) return (root, query, cb) -> Join<Doctor, DoctorSpeciality> specialityDoctor = root.join("doctor"); Join<DoctorSpeciality, Speciality> specialityRelation = specialityDoctor.join("speciality"); return cb.equal(specialityRelation.get("speciality"), speciality); ;
它不起作用,我需要帮助。以上是关于如何使用 Spring Data JPA 连接两个表的主要内容,如果未能解决你的问题,请参考以下文章