Hibernate-Criteria:从另一列中排序的表中选择不同的列

时间:2016-01-28 09:36:20

标签: hibernate hibernate-criteria

我想要实现的目标:使用Hibernate Criteria获取另一列排序的唯一ID列表。

到目前为止我的代码:

 Criteria crt = createCriteria(); //complex method returning Criteria
                                  //with joined tables, restrictions and ordering
 crt.setProjection( Projections.distinct( Projections.property( "id")));
 List<Integer> ids = crt.list();

有什么问题:当我按栏设置订单时,请说&#34; date&#34;我得到了查询:

SELECT DISTINCT id FROM table \\JOIN, WHERE...\\ ORDER BY date);

这显然是错误的并导致错误:

ORA-01791: not a SELECTed expression

我的想法如何解决:以某种方式迫使Hibernate生成此查询:

SELECT DISTINCT id FROM (SELECT * FROM table \\JOIN, WHERE...\\ ORDER BY date);

问题和我尝试的内容:createCriteria()方法,如果不是绝对必要,我不想修改。我没有找到将此标准用作DetachedCriteria的方法。

1 个答案:

答案 0 :(得分:2)

您不能使用条件将子查询放入FROM子句中。

你可以做错:

  • 使用HQL
  • 使用纯SQL
  • 更改为查询

id是不是唯一的?那么为什么不把日期放入select子句呢?它会改变结果,除非您在结果中得到另一列。

SELECT distinct date, id
FROM table
ORDER BY date

另一种方法:

SELECT min(date), id
FROM table
GROUP BY id
ORDER BY min(date)

这样的事情:

createCriteria(SomeTable.class)
  .setProjection(Projections.projectionList()
    .add(Projections.groupProperty("id"))
    .add(Projections.min("date"), "minDate")
  .add(Order.desc("minDate"))