JPAや「Criteria Builder」で「UNION」を照会することは可能ですか?
例を探していますが、これまでのところ結果がありません。
誰かがそれを使用する方法の例を持っていますか?
それともネイティブSQLでしょうか?
場合によっては、次のようなサブクエリを使用できます。
select e
from Entity e
where e.id in
(
select e.id
from Entity2 e2
join e2.entity e
where e2.someProperty = 'value'
)
or e.id in
(
select e.id
from Entity3 e3
join e3.entity e
where e3.someProperty = 'value2'
)
EntityManager.createNativeQuery(...); を使用して UNIONの使用を許可します
JPA の直接の結合はありません。私が行ったことは、2 つの仕様を構築することでした。
Specification<Task> specification = Specification.where(null);
Specification<Task> specification2 = Specification.where(null;
それらは単一のテーブルに属していますが、異なる値を返します
specification = specification.and((root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(criteriaBuilder.function(MONTH, Integer.class, root.get("deliveryExpirationDate")), month));
specification2 = specification2.and((root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.lessThan(criteriaBuilder.function(MONTH, Integer.class, root.get("deliveryExpirationDate")), month))
.and((root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("enable"), true));
この例では、最初の仕様では当月のタスクを有効または無効にする必要があり、2 番目の仕様では前月の有効なタスクのみが必要なタスクのテーブルです。
Specification<Task> specificationFullJoin = Specification.where(specification).or(specification2);
Esto es muy util para que la lista de tareas devueltas tenga paginación.
taskRepository.findAll(specificationFullJoin, pageable).map(TaskResponse::new); //Here you can continue adding filters, sort or search.
それが私を大いに助けてくれます。それが彼らが探しているものであるか、何かに役立つことを願っています.