Spring Data JPA Distinct - 从单列返回结果

新手上路,请多包涵

我有一些数据包含一个 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 许可协议

阅读 1.8k
2 个回答

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

之后,您可以 创建您调用的查询

 repository.findByState(State.APPROVED)

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

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

原文由 Luís Soares 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 meskobalazs 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题