java - Spring Boot @Query Annotation countQuery 有效,但 countName 无效
问题描述
我正在尝试使用@Query
带有 Spring 的注释执行一些本机查询,但遇到以下问题:
我有一个文件名为:jpa-named-queries.properties
我在其中放置查询,我有一个查询来获取数据,一个查询来计算数据。乙:
Find.members.team = SELECT ct.id teamId, r.user_id userId, (SELECT SUM(rd.resume_value) FROM resume_detail rd WHERE rd.resume_id = r.id) resumeMemberValue FROM resume r INNER JOIN challenge_team ct ON r.team_id = ct.id WHERE ct.id = :teamId ORDER BY resumeMemberValue ASC
Find.members.team.count = SELECT count(resume.id) FROM resume INNER JOIN challenge_team ct ON resume.team_id = ct.id WHERE ct.id = :teamId
我有 Repository 方法来使用查询:
@Query(name = "Find.members.team",
countName= "Find.members.team.count",
nativeQuery = true)
Page<TeamMemberProjection> findMembersTeamByIdWithPagination(@Param("teamId") Long id, Pageable pageable);
问题是如果我如上所示执行,则执行的查询是:
Hibernate: SELECT ct.id teamId, r.user_id userId, (SELECT SUM(rd.resume_value) FROM resume_detail rd WHERE rd.resume_id = r.id) resumeMemberValue FROM resume r INNER JOIN challenge_team ct ON r.team_id = ct.id WHERE ct.id = ? ORDER BY resumeMemberValue ASC limit ?
Hibernate: select count(rd) FROM resume_detail rd WHERE rd.resume_id = r.id) resumeMemberValue FROM resume r INNER JOIN challenge_team ct ON r.team_id = ct.id WHERE ct.id = ?
这会导致异常,因为执行的查询没有意义。
但是,如果我使用注释的countQuery属性,例如:
@Query(name = "Find.members.team",
countQuery= "SELECT count(resume.id) FROM resume INNER JOIN challenge_team ct ON resume.team_id = ct.id WHERE ct.id = :teamId",
nativeQuery = true)
Page<TeamMemberProjection> findMembersTeamByIdWithPagination(@Param("teamId") Long id, Pageable pageable);
The queries executed are:
Hibernate: SELECT ct.id teamId, r.user_id userId, (SELECT SUM(rd.resume_value) FROM resume_detail rd WHERE rd.resume_id = r.id) resumeMemberValue FROM resume r INNER JOIN challenge_team ct ON r.team_id = ct.id WHERE ct.id = ? ORDER BY resumeMemberValue ASC limit ?
Hibernate: SELECT count(resume.id) FROM resume INNER JOIN challenge_team ct ON resume.team_id = ct.id WHERE ct.id = ?
这非常有效。
这些属性的文档告诉: countName
Returns the name of the javax.persistence.NamedQuery to be used to execute count queries when pagination is used. Will default to the named query name configured suffixed by .count.
计数查询
Returns the name of the javax.persistence.NamedQuery to be used to execute count queries when pagination is used. Will default to the named query name configured suffixed by .count.
我在其他示例中一起使用了这两个属性并且工作得很好但是在这种特殊情况下我不明白我在做什么错误。
解决方案
推荐阅读
- go - 是否可以使用 Go net/rpc 检查元数据?
- app-store-connect - 从 App Store Connect 下载 dSYM 文件未按预期工作
- c++ - Hana BOOST_HANA_DEFINE_STRUCT 不适用于 std::unique_ptr
- javascript - 网络数据库实现
- android - Android,毕加索,Firebase 存储 - 检索图像,ImageView 上没有显示任何内容
- javafx - JavaFX HTMLEditor 忽略红帽上的输入
- vba - Excel VBA 代码,用户表单数据验证,连续最后一个实例
- excel - COUNTIFS(/w 多行和条件)
- php - 选定的过滤器应显示在活动过滤器列表中
- spring - 缺少工件 oracle:ojdbc6:jar:11.2.0.3