我有一些包含课程集合的用户,我只需要获取所注册课程的数量。但我不想加载整个学生对象,因为它会加载整个学生图形对象以及其他属性(如地址等等)。是否有一种方法可以使用Spring Data JPA仅获取计数?
我有一些包含课程集合的用户,我只需要获取所注册课程的数量。但我不想加载整个学生对象,因为它会加载整个学生图形对象以及其他属性(如地址等等)。是否有一种方法可以使用Spring Data JPA仅获取计数?
@Query("select size(s.courses) from Student s where s.id=:id")
long countCoursesByStudentId(@Param("id") long id);
或者您也可以按照以下方式在CourseRepository中添加一个计数方法(假设Course与Student之间存在ManyToOne关系,属性的主键和名称分别为id和student)
long countByStudentId(long id);
由于您拥有N对多关系,因此您可以使用size()
函数来获取用户的课程数量。
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")
SELECT a.tagid,a.tagName,size(*) FROM articletaglist a GROUP BY a.tagName
? - Abhishek Ekaanth