我可以为具有不同签名和 return 类型的多个 JPA 存储库方法使用一个 @Query 吗?

Can I have one @Query for multiple JPA repository methods with different signature and return type?

例如,我们有一个 JPA 存储库,其中包含三种查找完全相同的数据库选择但以不同形式呈现的方法:

public interface UserRepository extends JpaRepository<User, Long> {

   ... some repository methods ...

   List<User> findUsersByCustomCriteria(String criteria);

   Set<User> findUsersByCustomCriteria(String criteria, Sort sort);

   Page<User> findUsersByCustomCriteria(String criteria, Pageable pageable);
}

和一个查询

@Query("SELECT u FROM User u WHERE ...");

除了 User class 中的 @NamedQuery 之外,是否有一种简单的方法可以避免重复相同的查询 3 次?

好吧,我意识到可以将查询声明为字符串。但仍然欢迎更优雅的方式建议,可能是我遗漏了什么。

public interface UserRepository extends JpaRepository<User, Long> {
   String QUERY_TEXT = "SELECT u FROM User u WHERE ...";

   ... some repository methods ...

   @Query(QUERY_TEXT)
   List<User> findUsersByCustomCriteria(String criteria);

   @Query(QUERY_TEXT)
   Set<User> findUsersByCustomCriteria(String criteria, Sort sort);

   @Query(QUERY_TEXT)
   Page<User> findUsersByCustomCriteria(String criteria, Pageable pageable);
}