我有两个表教师和学生
Teacher(Teacher_id, Teacher_name)
Student(student_id, student_name)
Teacher_Student(id, Teacher_id, Student_id)
每个表都有相应的模型,例如 Teacher.java Student.java 和 TeacherStudent.java
我希望能够获得包含教师信息列表和每位教师的学生人数的结果集。例如:
Teacher_id, Teacher_name, No_of_students
我不想获取教师列表,然后循环遍历每个教师 ID 并查找学生人数。
我有一个 SQL 查询,可以在一个查询中执行此操作,但是如何在 hibernate 上执行此操作。另外,我希望 No_of_Students 值是暂时的。
最佳答案
不需要两个查询,您只需使用即可:
Query query = em.createQuery("SELECT t.id, t.name, t.listStudent.size() FROM Teacher");
这将返回一个对象数组的列表,如下所示:
List<Object[]> result = query.getResultList();
要获取您可以使用的信息:
List<Teacher> listTeachers = new ArrayList<>();
for(Object[] info : result){
listTeachers.add(
new Teacher(
(Long) info[0], // the id
(String) info[1], // the name
(Long) info[2] // the number of students
)
);
}
我假设在您的教师实体中您有一个构造函数:
public Teacher(String id, String name, Long nbrStudent){
this.id = id;
this.name = name;
this.nbrStudent = this.listStudent.size();
}
和一个@Transient
变量:
@Transient
private @Getter @Setter Long nbrStudent;
<小时/>
或者一步到位:
Query query = em.createQuery(
"SELECT com.namepackage.Teacher(t.id, t.name, t.listStudent.size()) FROM Teacher"
);
List<Teacher> result = query.getResultList();
请注意,我使用了com.namepackage.Teacher(t.id, t.name, t.listStudent.size())
关于java - Spring Hibernate 多对多关联与 transient 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122073/