QuerySyntaxException无效的路径+ JPA + Hibernate 5.4 [英] QuerySyntaxException Invalid path + 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屋!