Java JPA连接表上带条件的独立内部连接
下面我有两张表:Java JPA连接表上带条件的独立内部连接,java,sql,oracle,jpa,jpql,Java,Sql,Oracle,Jpa,Jpql,下面我有两张表: @Entity @Table(name="COLLEGE") public class College { private Long collegeId; private List<Student> students; @Id @Column(name = "COLLEGE_ID") public Long getCollegeId() { return this.collegeId; } public void setCollegeId(f
@Entity
@Table(name="COLLEGE")
public class College {
private Long collegeId;
private List<Student> students;
@Id
@Column(name = "COLLEGE_ID")
public Long getCollegeId() {
return this.collegeId;
}
public void setCollegeId(final Long collegeId) {
this.collegeId= collegeId;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "college")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public List<Student> getStudents() {
if (this.students== null) {
this.students= new ArrayList<>();
}
return this.students;
}
public void setStudents(List<Student> students){
this.students = students
}
}
我想获取学院
对象,其中包含特定系
的学生
。SQL查询如下所示:
select *
from COLLEGE c
inner join STUDENT s on c.COLLEGE_ID= s.collegeId
where c.COLLEGE_ID=12345 and s.DEPARTMENT="ENGINEERING";
到目前为止,我已经尝试了下面的JPA查询,但它返回了多个College
对象SELECT DISTINCT c
FROM COLLEGE c
INNER JOIN c.students s
where c.collegeId= :collegeid and s.department = :department
如何返回一个带有学生列表的学院
对象,以及经过筛选的部门
注意:我无法更改此处使用的实体对象。尝试使用此查询,使用JOIN FETCH
而不是internal JOIN
:
SELECT DISTINCT c FROM College c
JOIN FETCH c.students s
WHERE c.collegeId= :collegeid
AND s.department = :department
您使用的是哪种数据库管理系统?Oracle是此处使用的数据库,您不能使用。学院的学生就是学院的学生。都是。如果你写的话,javadoc就是这样的:“学院的学生”。如果你只想要其中的一部分,那么选择它们:select c,s from College c join c.students s s where c.collegeId=:collegeId and s.department=:department
@jbnize我怎么能用JPA
的方式来做呢?我建议的“不是用JPA的方式”是什么?这是一个JPQL查询。我已经在评论中发布了解决方案,但是谢谢你的帮助。我接受你的回答作为解决办法。
SELECT DISTINCT c FROM College c
JOIN FETCH c.students s
WHERE c.collegeId= :collegeid
AND s.department = :department