首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Criteria API排序

使用Criteria API排序
EN

Stack Overflow用户
提问于 2009-11-23 05:55:13
回答 5查看 181.6K关注 0票数 75

当我编写HQL查询时

Query q = session.createQuery("SELECT cat from Cat as cat ORDER BY cat.mother.kind.value");
return q.list();

百事大吉。但是,当我编写一个标准时,

Criteria c = session.createCriteria(Cat.class);
c.addOrder(Order.asc("mother.kind.value"));
return c.list();

我得到一个异常org.hibernate.QueryException: could not resolve property: kind.value of: my.sample.data.entities.Cat

如果我想使用条件和顺序,我应该如何表达我的“Order by"?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-23 06:39:13

您需要为mother.kind创建一个别名。你可以这样做。

Criteria c = session.createCriteria(Cat.class);
c.createAlias("mother.kind", "motherKind");
c.addOrder(Order.asc("motherKind.value"));
return c.list();
票数 109
EN

Stack Overflow用户

发布于 2009-11-23 06:02:02

如果不查看映射(请参阅@Juha的评论),就很难确定,但我认为您需要类似于以下内容:

Criteria c = session.createCriteria(Cat.class);
Criteria c2 = c.createCriteria("mother");
Criteria c3 = c2.createCriteria("kind");
c3.addOrder(Order.asc("value"));
return c.list();
票数 8
EN

Stack Overflow用户

发布于 2017-04-15 15:00:21

这是您必须做的,因为sess.createCriteria已被弃用:

CriteriaBuilder builder = getSession().getCriteriaBuilder();
CriteriaQuery<User> q = builder.createQuery(User.class);
Root<User> usr = q.from(User.class);
ParameterExpression<String> p = builder.parameter(String.class);
q.select(usr).where(builder.like(usr.get("name"),p))
  .orderBy(builder.asc(usr.get("name")));
TypedQuery<User> query = getSession().createQuery(q);
query.setParameter(p, "%" + Main.filterName + "%");
List<User> list = query.getResultList();
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1780129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档