QuerySyntaxException无效的路径+ JPA + Hibernate 5.4 [英] QuerySyntaxException Invalid path + JPA + Hibernate 5.4

查看:192
本文介绍了QuerySyntaxException无效的路径+ JPA + Hibernate 5.4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据CriteriaQuery获取总行数,但出现异常

I am trying to get the total row count based on the CriteriaQuery but got an exception

org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'generatedAlias1.package.id' [select count(generatedAlias0) from com.test.Product as generatedAlias0 where ( generatedAlias1.package.id like :param0 )]

代码

CriteriaBuilder cb = session().getCriteriaBuilder();
CriteriaQuery<Product> query = cb.createQuery(Product.class);
Root<Product> entity = query.from(Product.class);
query.where(where_clause);

CriteriaQuery<Long> queryCount = cb.createQuery(Long.class);
Root<Product> entity = queryCount.from(query.getResultType());
queryCount.where(query.getRestriction()) -- this is where the problem is creating

实体

class Product{
Package package;
int quantity;

/// getter setter method

}

class Package{
String id;
String name;
String type

/// getter setter method

}

映射是使用hbm xml文件完成的.

mapping is done using hbm xml file.

您能告诉我如何解决它吗?

can you please let me know how to fix it ?

推荐答案

您有两个不同的查询.因此,您不能对它们两个都使用相同的谓词,因为它们的根不同.

You have two different queries. So you can't use the same predicate for both of them, because they have different roots.

org.hibernate.hql.internal.ast.QuerySyntaxException:无效的路径:'generatedAlias1.package.id'[从以下选择计数(generatedAlias0)com.test.Product为generateAlias0,其中(generateAlias1.package.id像:param0)]

org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'generatedAlias1.package.id' [select count(generatedAlias0) from com.test.Product as generatedAlias0 where ( generatedAlias1.package.id like :param0 )]

generationAlias1 是另一个查询中 Product 的别名

generatedAlias1 is alias for Product from another query

要使谓词可重用,您应该创建方法返回谓词

To make the predicate reusable you should create method returns predicate

Predicate getPredicate(Root<Product> root, CriteriaBuilder builder, Parameter param) {
   // returns predicate using root, builder and param you need
   return builder.equal(root.get("fieldName"), param);
}

然后在查询中使用它

CriteriaBuilder cb = session().getCriteriaBuilder();
CriteriaQuery<Product> query = cb.createQuery(Product.class);
Root<Product> entity = query.from(Product.class);
query.where(getPredicate(entity, cb, param));

CriteriaBuilder cbCount = session().getCriteriaBuilder();
CriteriaQuery<Long> queryCount = cbCount.createQuery(Long.class);
Root<Product> entityCount = queryCount.from(Product.class);
queryCount.where(getPredicate(entityCount, cbCount, param));

这篇关于QuerySyntaxException无效的路径+ JPA + Hibernate 5.4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆