Spring 数据 JPA 不同 - Return 来自单个列的结果

Spring Data JPA Distinct - Return results from a single column

我有一些数据包含 STATE 字段 (String/Text),它定义了给定请求当前处于什么状态(例如待处理、批准拒绝等)并获取所有唯一的该列的值我可以 运行 以下 TSQL 查询

SELECT DISTINCT STATE FROM CALLOUT_REQUEST

其中 CALLOUT_REQUEST 是我的 table 姓名,STATE 是 return 类似的字段:

状态

但是我不明白如何将其转换为存储库中的查询,因为我似乎需要一个 "by" 语句或其他一些我可以获得基于 STATE 的过滤机制在?

我正在寻找 return - 如上面的原始 TSQL 查询所示 - 是某种列表或数组对象,它包含所有 [=13] 中的所有 unique/distinct 值=] 字段。

所以在伪代码中我想我正在寻找这样的东西:

String[] states = repository.findDisinctState();

然后 findDistinctState() 会 return 一个数组。

希望这是有道理的 - 我对 Java 和 Spring 总体来说还很陌生,所以我认为我缺少一些概念知识来利用上述内容。

更新:

'state' 概念已关闭,因此我可以将其实现为一个枚举 - 唯一的问题是我不知道该怎么做 :) 我会研究如何做到这一点,因为我认为它非常适合我正在努力实现的目标。

我从提供的查询中获得的列表旨在用于计算所有出现的次数。我之前有这段代码来获得每个 'states' 的总计数:

Map stats = new HashMap();
String[] states = {"approved", "denied", "pending", "deactivated"};
for (int i = 0; i < states.length; i++) {
    stats.put(states[i], repository.countByState(states[i]));
}

我的理解是否正确,上面代码片段中的状态 Array 可以变成一个枚举,然后我什至不再需要自定义 @Query 了?

您可以为此使用 JPQL 查询,带有 @org.springframework.data.jpa.repository.Query 注释:

@Query("select distinct state from CalloutRequest")
List<String> findDistinctStates();

如果那个 state 概念是封闭的 - 你知道它可能的值集 - 它应该是一个枚举。

之后,您可以 create queries 像这样调用:

repository.findByState(State.APPROVED)

如果你不能创建一个枚举,你需要一个单独的方法来获取不同的值,这是 JPA 不能提供的,因为你需要一个字符串列表而不是 CalloutRequests。 然后你需要手动指定一个查询,如:

@Query("SELECT DISTINCT State FROM CALLOUT_REQUEST")
List<String> findDistinctStates();

如果您不想使用@Query,那么一种解决方案是使用名为“getState()”的方法创建接口“StateOnlyInterface”。

然后在您的存储库中创建名称为 getDistinctState() 的方法。 Return 此方法的类型将保留为 StateOnlyInterface 的 ArrayList。