使用spring-data-jpa查询方法加载实体属性

5
例如,我有一个实体"用户",它有字段"id"、"active"和其他10个字段。那么怎样才能获取所有活跃用户呢?很简单:
public interface UserRepository extends JpaRepository<User, Integer> {
    List<User> findAllByActiveTrue();
}

我应该如何加载活跃用户的ID列表?我需要使用@Query注解自己编写JPQL,例如:
public interface UserRepository extends JpaRepository<User, Integer> {
    @Query("select u.id from User u where u.active = true")
    List<Integer> fetchActiveUsersIds();
}

我的问题是: 我是否可以命名一种方法来避免自己编写JQPL,就像第一个例子中那样?

更新

我需要像这样的东西:

public interface UserRepository extends JpaRepository<User, Integer> {
    List<Integer> findAll_Id_ByActiveTrue();
}

方法的名称由接口给出。如果您更改名称,它将不会有任何变化。 - Roman C
@RomanC 我的意思是生成 JPA 查询的名称,就像第一个代码示例中一样。 - AlexB
https://dev59.com/Bl0a5IYBdhLWcg3wboTU - leeor
@leeor 那不是我想要的。不,那个问题看起来和我的类似,但解决方案比我的冗长得多。 - AlexB
1个回答

1
我认为这是不可能的。 Repository 的主要目的是管理 Domain Classes 的持久性,而不是独立地管理属性。在 Spring Data Repositories documentation 中,您可以找到可用于 CrudRepository 的方法列表。
您可以使用 property extensions 来组合查询,但对于非聚合方法,它始终返回 domain class
对于您提到的特定用例,您需要使用 @Query 注释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接