raj*_*raj 3 java hibernate jpa
我试图根据 CriteriaQuery 获取总行数,但出现异常
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 )]
Run Code Online (Sandbox Code Playgroud)
代码
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
Run Code Online (Sandbox Code Playgroud)
实体
class Product{
Package package;
int quantity;
/// getter setter method
}
class Package{
String id;
String name;
String type
/// getter setter method
Run Code Online (Sandbox Code Playgroud)
}
映射是使用 hbm xml 文件完成的。
你能让我知道如何解决它吗?
ale*_*kyi 10
您有两个不同的查询。所以你不能对它们使用相同的谓词,因为它们有不同的根。
org.hibernate.hql.internal.ast.QuerySyntaxException:无效路径:' generatedAlias1.package.id' [从 com.test.Product 选择 count( generatedAlias0) 作为 generatedAlias0 其中( generatedAlias1.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);
}
Run Code Online (Sandbox Code Playgroud)
然后在查询中使用它
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));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8804 次 |
最近记录: |