41

JPAや「Criteria Builder」で「UNION」を照会することは可能ですか?

例を探していますが、これまでのところ結果がありません。

誰かがそれを使用する方法の例を持っていますか?

それともネイティブSQLでしょうか?

4

7 に答える 7

41

場合によっては、次のようなサブクエリを使用できます。

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'
)
于 2014-08-05T09:36:12.000 に答える
1

EntityManager.createNativeQuery(...); を使用して UNIONの使用を許可します

于 2018-06-21T06:32:57.110 に答える
0

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.

それが私を大いに助けてくれます。それが彼らが探しているものであるか、何かに役立つことを願っています.

于 2019-03-22T15:03:01.547 に答える