gpt4 book ai didi

java - Spring Hibernate 多对多关联与 transient 值

转载 作者:行者123 更新时间:2023-12-02 11:18:08 24 4
gpt4 key购买 nike

我有两个表教师和学生

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com