简而言之:hibernate状态不支持投影和示例查询吗?我发现了这篇文章:
代码是这样的:
User usr = new User(); usr.setCity = 'TEST'; getCurrentSession().createCriteria(User.class) .setProjection( Projections.distinct( Projections.projectionList() .add( Projections.property("name"), "name") .add( Projections.property("city"), "city"))) .add( Example.create(usr))
就像其他张贴者所说的那样,生成的sql始终具有一个where类,仅 引用y0_ =? 而不是this_.city。
我已经尝试了几种方法,并搜索了问题跟踪器,但对此一无所获。
我什至尝试使用Projection别名和Transformers,但是它不起作用:
User usr = new User(); usr.setCity = 'TEST'; getCurrentSession().createCriteria(User.class) .setProjection( Projections.distinct( Projections.projectionList() .add( Projections.property("name"), "name") .add( Projections.property("city"), "city"))) .add( Example.create(usr)).setResultTransformer(Transformers.aliasToBean(User.class));
有没有人通过示例使用投影和查询?
我可以看到您的用户类别吗?这只是使用下面的限制。我不明白为什么限制与示例之间确实有什么不同(我认为示例中默认情况下会忽略空字段)。
getCurrentSession().createCriteria(User.class) .setProjection( Projections.distinct( Projections.projectionList() .add( Projections.property("name"), "name") .add( Projections.property("city"), "city"))) .add( Restrictions.eq("city", "TEST"))) .setResultTransformer(Transformers.aliasToBean(User.class)) .list();
我从未使用过alaistToBean,但我只是读过它。您也可以循环搜索结果。
List<Object> rows = criteria.list(); for(Object r: rows){ Object[] row = (Object[]) r; Type t = ((<Type>) row[0]); }
如果需要,您可以自己手动填充用户。
如果没有更多信息来诊断问题,很难调查问题。