代码之家  ›  专栏  ›  技术社区  ›  wds

在hql select子句中返回一列,而不实际使用该列

  •  2
  • wds  · 技术社区  · 15 年前

    我有一个查询,它返回如下对象的列表:

    select distinct ref from references where [...]
    

    select distinct ref from references where [...] order by ref.foo.name
    

    3 回复  |  直到 15 年前
        1
  •  0
  •   KLE rslite    15 年前

    在Hibernate方面,一个简单的解决方案是让DAO代码处理您的问题。您的请求将添加列。

    Dao方法将从Hibernate接收一个列表,并对其进行转换。

    List<Object[]> rawResults = query....;
    List<References> results = new ArrayList<References>(rawResults.size());
    for(Object[] rawResult : rawResults) {
      results.add(rawResults[0]);
    }
    return results;
    
        2
  •  0
  •   APC    15 年前

    Oracle完全可以按未包含在选择中的列对查询进行排序:

    SQL> select ename from emp
      2  order by empno
      3  /
    
    ENAME
    ----------
    CLARKE
    VAN WIJK
    PADFIELD
    ROBERTSON
    BILLINGTON
    SPENCER
    BOEHMER
    RIGBY
    SCHNEIDER
    CAVE
    KULASH
    HALL
    GASPAROTTO
    KISHORE
    
    14 rows selected.
    

    order by ref.foo.name -也许我错过了一些微妙的东西?

    编辑 文森特指出了我遗漏的微妙之处——使用 DISTINCT

    SQL> select distinct ename from emp
      2  order by empno
      3  /
    order by empno
             *
    ERROR at line 2:
    ORA-01791: not a SELECTed expression
    
    
    SQL>
    

    需要使用 独特的 通常表示设计缺陷,或者 WHERE 子句或未充分规范化的数据模型。尽管这并不能帮助提问者,他们可能只是需要找到一个解决方法。

        3
  •  0
  •   Daniel    9 年前