Criteria criteria = sessionProvider.getCurrentSession().createCriteria(Foo.class);
criteria.createAlias("game", "game");
if (from != null) criteria.add(Restrictions.ge("game.created", from.toDate()));
if (to != null) criteria.add(Restrictions.lt("game.created", to.toDate()));
criteria.setProjection(Projections.distinct(Projections.property("game")));
criteria.addOrder(Order.desc(("game.created")));
criteria.setMaxResults(100);
games = criteria.list();
我使用上面的代码来获取游戏。实体 Foo 有一个名为游戏的游戏。我需要通过 Foo 来获取游戏参考。但是当我运行上面的代码时,我得到以下错误。
Caused by: org.postgresql.util.PSQLException: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
Position: 246
如何正确添加预测和订单?
答案 0 :(得分:1)
你在逻辑上有错误,你试过像这样制作smth:
Select Distinct game From Foo Order By created
它在逻辑上是错误的,服务器不能通过“创建”来命令结果,因为只有“游戏”列存在,并且按“创建”排序是不可能的。
答案 1 :(得分:1)
有同样的问题,我用过
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
而不是
Projections.distinct
它对我有用。