【发布时间】:2016-08-04 21:26:21
【问题描述】:
我在我的应用程序中使用 Querydsl 来极大地改进查询数据库的代码。 但是,我有一个来自外部服务的 JPA 谓词 (javax.persistence.criteria.Predicate)。 我想混合使用 Querydsl 和外部谓词创建的查询。例如:
// JPA Predicate from external service
Root<User> root = ...;
CriteriaBuilder cb = ...;
javax.persistence.criteria.Predicate externalPredicate = externalService.filterEmail(root, cb, "%@gmail.com");
// Create Querydsl predicate
BooleanExpression querydslExp = QUser.username.eq("foo");
// Mix predicates (this is what I need)
querydslExp.and(externalPredicate);
另一种解决方案是将 Querydsl 谓词转换为 JPA 谓词:
cb.and(querydslExp.toJpaPredicate(), externalPredicate);
有可能吗? 如果是,我该如何实现? 如果没有,是否有另一种混合谓词的解决方案(比如将两者都转换为 SQL 字符串并创建一个新查询)?
谢谢
【问题讨论】:
-
您想混合使用两种完全不同的 API?据我所知,不能这样做,原因很明显......它们是替代品
标签: jpa spring-data-jpa querydsl