Java 使用条件休眠嵌套查询

Java 使用条件休眠嵌套查询,java,spring,hibernate,postgresql,jpa,Java,Spring,Hibernate,Postgresql,Jpa,是否可以创建生成以下sql的条件: select name from (select distinct name from person) as aliasname order by lower(name); 这里有两个sql- 从人员中选择不同的名称 按lowername的别名顺序从中选择名称 我想创建标准,然后执行标准。列出我没有答案,但为什么要进行第二次选择 SELECT DISTINCT NAME FROM PERSON AS ALIASNAME ORDER BY LOWER(NAM

是否可以创建生成以下sql的条件:

select name from (select distinct name from person) as aliasname  order by lower(name);
这里有两个sql-

从人员中选择不同的名称

按lowername的别名顺序从中选择名称


我想创建标准,然后执行标准。列出我没有答案,但为什么要进行第二次选择

SELECT DISTINCT NAME FROM PERSON AS ALIASNAME ORDER BY LOWER(NAME)

将返回相同的数据。

我认为,这将满足您的需要:

criteria.addOrder(Order.asc("name").ignoreCase())
        .setProjection(Projections.distinct(Projections.property("name")))
        .list();
或者,此条件使用带有名称投影的DetachedCriteria作为子查询:

DetachedCriteria distinctNamesCriteria = DetachedCriteria.forClass(Person.class);
distinctNamesCriteria.setProjection(Projections.distinct(Projections.property("name")));

criteria.add(SubQueries.propertyIn("name", distinctNamesCriteria))
        .addOrder(Order.asc("name").ignoreCase())
        .list();

亲爱的OGZD,在你的建议中,遗漏了两件事:1。它不适用于lowerneed使用。ignoreCase,2。它不提供嵌套选择。由于此查询通过lowername从人员顺序中选择不同的名称;如果postgres失败,我正在寻找问题中描述的变通查询,如LowerNames中的选择姓名从选择不同姓名从个人中选择别名顺序。您确定Generated查询返回的结果集与问题中提到的相同吗??在你更新代码之前我已经试过了,得到了不同的结果集。此条件实际上不会返回不同的记录。如果您引用一个类似的答案来回答这个问题,那就太好了。这实际上在postgres中给出了一个错误:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在SELECT列表中。因此,我将选择两个嵌套的选项。您不能按“选择部分”中不存在的列进行排序。