我想要实现的目标:使用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的方法。
答案 0 :(得分:2)
您不能使用条件将子查询放入FROM子句中。
你可以做错:
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"))