【发布时间】:2019-02-27 14:02:45
【问题描述】:
我有一个看起来像这样的 JPQL:
SELECT
DISTINCT b
FROM
Book b
INNER JOIN
FETCH b.volumes as v
INNER JOIN
v.metadata as md
WHERE
b.createdAt IN (
SELECT
MAX(book.createdAt)
FROM
Book book
WHERE
book.author = ?1
)
AND md.genre IN (
?2
)
由于这必须动态生成,我需要使用 Criteria API 来添加各种条件。除了 JOIN 之外,我什么都可以搞定,因为第一个是 fetch,我无法将那个与下一个链接起来。
这是我目前所拥有的:
query.distinct(true);
final Join<Book, Metadata> Metadata = root.join("volumes").join("metadata");
final Subquery<LocalDateTime> subquery = query.subquery(LocalDateTime.class);
final Root<Book> plan = subquery.from(Book.class);
subquery.where(criteriaBuilder.equal(plan.get("author"), companyId));
final Expression<LocalDateTime> createdAt = book.get("createdAt");
subquery.select(criteriaBuilder.greatest(createdAt));
predicates.add(criteriaBuilder.in(root.get("createdAt")).value(subquery));
genre.ifPresent(strings -> predicates.add(criteriaBuilder.in(metadata.get("genre")).value(strings)));
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
关于如何使第一个加入获取的任何想法?
【问题讨论】:
标签: jpa spring-data-jpa spring-data criteria-api