一尘不染

通过示例和投影进行休眠查询

hibernate

简而言之: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));

有没有人通过示例使用投影和查询?


阅读 217

收藏
2020-06-20

共1个答案

一尘不染

我可以看到您的用户类别吗?这只是使用下面的限制。我不明白为什么限制与示例之间确实有什么不同(我认为示例中默认情况下会忽略空字段)。

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]);
}

如果需要,您可以自己手动填充用户。

如果没有更多信息来诊断问题,很难调查问题。

2020-06-20