nik*_*ers 70 java hibernate hql sql-order-by
当我写一个HQL查询
Query q = session.createQuery("SELECT cat from Cat as cat ORDER BY cat.mother.kind.value");
return q.list();
Run Code Online (Sandbox Code Playgroud)
一切都好.但是,当我写一个Criteria时
Criteria c = session.createCriteria(Cat.class);
c.addOrder(Order.asc("mother.kind.value"));
return c.list();
Run Code Online (Sandbox Code Playgroud)
我得到一个例外 org.hibernate.QueryException: could not resolve property: kind.value of: my.sample.data.entities.Cat
如果我想使用Criteria and Order,我应该如何表达我的"order by"?
mR_*_*r0g 108
您需要为.创建别名mother.kind.你是这样做的.
Criteria c = session.createCriteria(Cat.class);
c.createAlias("mother.kind", "motherKind");
c.addOrder(Order.asc("motherKind.value"));
return c.list();
Run Code Online (Sandbox Code Playgroud)
在没有看到映射的情况下很难确定(请参阅@ 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();
Run Code Online (Sandbox Code Playgroud)
您还可以添加联接类型:
Criteria c2 = c.createCriteria("mother", "mother", CriteriaSpecification.LEFT_JOIN);
Criteria c3 = c2.createCriteria("kind", "kind", CriteriaSpecification.LEFT_JOIN);
Run Code Online (Sandbox Code Playgroud)
这是你不得不做的事情,因为不推荐使用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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164195 次 |
| 最近记录: |