如何解决QuerySyntaxException无效的路径+ JPA + Hibernate 5.4
我正在尝试根据CriteriaQuery获取总行数,但出现异常
{{date('Y') - $birth->birth_date->year + 1}}
代码
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
}
映射是使用hbm xml文件完成的。
您能告诉我如何解决它吗?
解决方法
您有两个不同的查询。因此,您不能对它们两个都使用相同的谓词,因为它们的根不同。
org.hibernate.hql.internal.ast.QuerySyntaxException:无效的路径: 'generatedAlias1.package.id'[从以下选择计数(generatedAlias0) com.test.Product为generateAlias0,其中(generateAlias1.package.id 像:param0)]
generatedAlias1
是另一个查询中Product
的别名
要使谓词可重用,您应该创建方法返回谓词
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));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。