मेरे पास नीचे दो टेबल हैं:

@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
    }
}



@Entity
@Table(name="STUDENT")
public class Student {
   private Long studentId;
   private College college;
   private String name;
   private String department;

@Id
public Long getStudentId() {
    return this.studentId;
  }
public void setStudentId(Long studentId) {
    this.studentId = studentId;
 }

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "COLLEGE_ID")
public getCollege() {
    return this.college;
  }
public setCollege(College college) {
    this.college = college;
  }
  ......
  ......
}

मैं एक विशिष्ट department की students की सूची के साथ college ऑब्जेक्ट प्राप्त करना चाहता हूं। एसक्यूएल क्वेरी नीचे है:

select *
from COLLEGE c
inner join STUDENT s on c.COLLEGE_ID= s.collegeId
where c.COLLEGE_ID=12345 and s.DEPARTMENT="ENGINEERING";

अब तक मैंने नीचे जेपीए क्वेरी की कोशिश की है लेकिन यह कई College ऑब्जेक्ट्स लौटा रहा है।

SELECT DISTINCT c
FROM COLLEGE c
INNER JOIN c.students s
where c.collegeId= :collegeid and s.department = :department

फ़िल्टर किए गए department के साथ students की सूची के साथ एक एकल college ऑब्जेक्ट कैसे वापस करें?

नोट: मैं यहां उपयोग की जाने वाली इकाई वस्तुओं को नहीं बदल सकता।

2
Arun 19 सितंबर 2018, 18:21
आप किस डीबीएमएस का उपयोग कर रहे हैं?
 – 
jarlh
19 सितंबर 2018, 18:24

1 उत्तर

सबसे बढ़िया उत्तर

INNER JOIN के बजाय JOIN FETCH का उपयोग करके इस क्वेरी का उपयोग करने का प्रयास करें:

SELECT DISTINCT c FROM College c 
       JOIN FETCH c.students s
            WHERE c.collegeId= :collegeid 
                  AND s.department = :department
2
ℛɑƒæĿᴿᴹᴿ 26 जून 2020, 23:47