public class UserIdCountCourses {
private Long userId;
private Integer countCourses;
public UserIdCountCourses(Long userId, Integer countCources) {
this.userId = userId;
this.countCourses = countCources;
}
public Long getUserId() {
return userId;
}
public Integer getCountCourses() {
return countCourses;
}
}
@Query("select new package.....UserIdCountCourses(u.id , size(u.cources))
from User u group by u.id")
List<UserIdCountCourses> findUserIdAndCountEnrolledCourses ();
@SqlResultSetMapping(
name="UserIdCountCoursesMapping",
classes={
@ConstructorResult(
targetClass=UserIdCountCourses.class,
columns={
@ColumnResult(name="user_id"),
@ColumnResult(name="count_courses")
}
)
}
)
--just query example
@NamedNativeQuery(name="getUserIdCountCourses", query="SELECT user_id,count (1) FROM user LEFT JOIN cources cu ON user_id=cu.user_id",resultSetMapping="UserIdCountCoursesMapping")
2条答案
按热度按时间qyuhtwio1#
您可以在您的StudentRepository中添加一个如下所示的方法(假设您的实体Student pk为id,并将属性名称设置为courses)
或者,您也可以在CourseRepository中添加如下计数方法(假设课程与学生的多对一关系,pk和属性名称为id和student)
sczxawaw2#
由于您有N对许多关系,您可以使用
size()
函数来获取用户的课程。此外,您还可以使用本地查询仅选择您需要的内容。本地查询结果是对象数组,但您可以对命名的本地查询应用@SqlResultSetMapping,例如(将SqlResultSetMapping添加到实体或xml配置文件中):