【问题标题】:Criteria Query to retrieve data from DB using specification and predicate使用规范和谓词从数据库中检索数据的条件查询
【发布时间】:2021-01-20 07:30:24
【问题描述】:
我有两个表(用户、车辆),我想编写条件查询以使用条件查询规范和谓词从两个联接表中检索数据。
select ur.id, count (ur.vehicle_FK) from user so
inner join VEHICLE vhe on vhe.user_id_FK = ur."ID"
group by ur.id, vhe.user_id_FK;
如何使用条件查询来实现它??
【问题讨论】:
标签:
spring-boot
spring-data-jpa
spring-data
criteria
specification-pattern
【解决方案1】:
试试这样的:
Criteria criteria = session.createCriteria(User.class, "user");
criteria.createAlias("user.vehicle_FK", "vehicle", Criteria.INNER_JOIN);
criteria.setProjection(
Projections.projectionList().add(Projections.groupProperty("user.id"))
.add(Projections.countDistinct("user.id")));
【解决方案2】:
条件查询中的参数
以下查询字符串表示带有参数的 JPQL 查询:
SELECT c FROM Country c WHERE c.population > :p
可以使用 JPA 条件 API 构建等效查询,如下所示:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Country> q = cb.createQuery(Country.class);
Root<Country> c = q.from(Country.class);
ParameterExpression<Integer> p = cb.parameter(Integer.class);
q.select(c).where(cb.gt(c.get("population"), p));
创建 ParameterExpression 实例 p 以表示查询参数。 where 方法设置 WHERE 子句。如上所示,CriteriaQuery 接口支持方法链。有关如何设置条件查询子句和构建条件表达式的详细说明,请参阅本页下一部分中的链接。
您可以在此处找到更多示例
https://www.objectdb.com/java/jpa/query/criteria
记得在找到答案时发布答案! :)