【问题标题】:How to obtain distinct values from a column? [duplicate]如何从列中获取不同的值? [复制]
【发布时间】:2019-12-01 12:36:47
【问题描述】:

我有一个简单的表格来模拟一个人:

ID   |   AGE   |   NAME   |
---------------------------
1    |   40    |   Peter  |
---------------------------
2    |   39    |   John   |
---------------------------
3    |   40    |   Lora   |
---------------------------
4    |   40    |   Mark   |
---------------------------
5    |   38    |   Anna   |
---------------------------

我想要一个返回包含不同年龄且不重复的整数列表的方法,在这种情况下,结果将是 [38,39,40]。

我有:

List<Integer> findDistinctAge(); 

但它不起作用。我知道我可以在方法签名上方使用@Query 注释来指定对表的查询。但是我不想用,我想用JPA语法,所以方法名定义了查询。

非常感谢您的帮助。

【问题讨论】:

    标签: java spring jpa spring-data-jpa jpql


    【解决方案1】:
    `List<person> findDistinctAge();`
    

    应该可以。否则,请发布您的完整代码。

    【讨论】:

    • “我想要一个返回包含不同年龄且不重复的整数列表的方法”这将返回 Person 的列表,而不是 Integer
    【解决方案2】:

    您需要在方法名称中添加“By”,这将返回具有不同年龄的人员列表:

    List&lt;person&gt; findDistinctByAge();

    您可以在进一步的调用中使用person.age 参数或从人员列表创建新列表。 我认为没有直接的方法可以返回年龄列表。

    【讨论】:

    • 更新了我对返回类型和用法的回答。
    • 我同意,这就是为什么提到您稍后需要迭代 Person 对象的原因。顺便说一句,你试过 findDistinctAge 吗?这会返回年龄列表吗?它对我不起作用,我没有找到直接返回年龄列表的内置方法。
    【解决方案3】:

    Projections 你可以试试这个技巧:

    public interface OnlyAge {
        Integer getAge();
    }
    
    List<OnlyAge> findDistinctBy(); 
    

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2023-03-08
      相关资源
      最近更新 更多