我有一些数据包含一个 STATE
字段(字符串/文本),它定义了给定请求当前处于什么状态(例如待处理、批准拒绝等),并从该列中获取所有唯一值我可以运行以下 TSQL 查询
SELECT DISTINCT STATE FROM CALLOUT_REQUEST
其中 CALLOUT_REQUEST
是我的表名和 STATE
是返回类似内容的字段:
状态
- 得到正式认可的
- 拒绝
- 待办的
- …
但是我不明白如何将其转换为我的存储库中的查询,因为我似乎需要一个“by”语句或其他一些我可以获得 STATE
的过滤机制?
我要返回的内容(如上面的原始 TSQL 查询所示)是某种列表或数组对象,其中包含所有 STATE
字段中的所有唯一/不同值。
所以在伪代码中我想我正在寻找这样的东西:
String[] states = repository.findDisinctState();
其中 findDistinctState()
将返回一个数组。
希望这是有道理的——总的来说,我对 Java 和 Spring 还很陌生,所以我认为我缺少一些概念性知识来利用上述内容。
更新:
“状态”概念是封闭的,所以我可以将其作为枚举来实现——唯一的问题是我不知道该怎么做 :) 我会研究如何做到这一点,因为我认为它完全符合我想要实现的目标。
我从提供的查询中获得的列表旨在用于获取所有事件的计数。我之前有这段代码来获得每个“州”的总数:
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
了?
原文由 Rasmus Sjørslev 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果那个
state
概念是封闭的——你知道它可能的值集——它应该是一个枚举。之后,您可以 创建您调用的查询:
如果您不能创建枚举,则需要一个单独的方法来获取 JPA 无法提供的不同值,因为您需要一个字符串列表而不是
CalloutRequest
的列表。然后您需要手动指定一个查询,例如: