我有一些数据包含定义给定请求当前处于什么状态(例如未决,批准拒绝等)的STATE
字段(字符串/文本)并获得从该列中的所有唯一值,我可以运行下面的TSQL查询Spring Data JPA Distinct - 从单个列返回结果
SELECT DISTINCT STATE FROM CALLOUT_REQUEST
其中CALLOUT_REQUEST
是我的表名和STATE
是返回类似领域:
州
- 批准
- 否认
- 未决
- ...
但是我不明白我怎么会把它转换成一个查询在我的仓库,因为它似乎我需要一个“通过“声明或其他一些过滤机制,我可以得到基于?STATE
?
我想要返回的东西 - 如上面的原始TSQL查询所示 - 是某种List或Array对象,其中包含所有STATE
字段中的所有唯一/不同值。
因此,在伪代码,我认为我找的是这样的:
String[] states = repository.findDisinctState();
其中findDistinctState()
会再回到各种各样的数组。
希望是有道理的 - 我对Java和Spring一般都很陌生,所以我想我缺少一些概念性知识来利用上述。
UPDATE:
“国家”的概念是关闭的,所以我可以实现,作为一个枚举 - 唯一的问题是我不知道该怎么做:)虐待看看我怎么能做到这一点,因为我认为它完全符合我想要实现的目标。
我从提供的查询中获得的列表旨在用于获取所有出现次数。我有这个代码之前得到一个总数为每个“州”的:
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
了?
我已经更新了这个问题,为什么我最初询问自定义查询以表明我需要使用它来收集返回的Distinct值的计数。 –
我没有看到创建枚举的问题。只需使用所有可能的值创建一个:https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html 然后在该枚举类型的“CalloutRequest”下创建一个字段。最后,将其标注为:@Enumerated(EnumType.String) http://tomee.apache.org/examples-trunk/jpa-enumerated/README.html –
事实上,这是我的第一个Java应用程序是问题,我根本不知道该怎么做,但谢谢你澄清。 –