Спецификации Spring jpa ИЛИ предложение возвращает пустой список - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь реализовать это в моем проекте:

        Specification<Delivery> shipmentSpec = ((root, query, builder) ->
                builder.or(builder.equal(root.join("entries").get("shipment").get("senderGeography"), geo),
                           builder.equal(root.join("entries").get("shipment").get("receiverGeography"), geo)));

        Specification<Delivery> collectSpec = ((root, query, builder) ->
               builder.equal(root.join("entries").get("collect").get("geography"), geo));

        repository.findAll(Specification.where(shipmentSpec).or(collectSpec);

И это ничего не возвращает.но это работает хорошо, если я использую только одну спецификацию, такую ​​как: repository.findAll(Specification.where(shipmentSpec));

или

repository.findAll(Specification.where(collectSpec));

У объекта доставки есть поле:

@OneToMany(mappedBy = "delivery")
private List<Entry> entries = new ArrayList<>();

И сущность Entry имеет поля:

@ManyToOne
@JoinColumn(name = "SHIPMENT_ID")
private Shipment shipment;

@ManyToOne
@JoinColumn(name = "COLLECT_ID")
private Collect collect;

Одно из этих полей всегда пустое, но не оба одновременно.

Объекты Отгрузка и Сбор имеют поля:

@ManyToOne(optional = false)
@JoinColumn(name = "GEOGRAPHY_ID", nullable = false)
private Geography geography;

(Отгрузка имеет 2 региона)

Мне нужна опция, чтобы вернуть все объекты Доставки, которые есть в записях отгрузки ИЛИсобрать с указанной географией.

Спасибо.

ОБНОВЛЕНО.

Я попытался получить объекты с @Query, но он действует так же, как метод спецификации, возвращает пустой список:

@Query("select d from Delivery d, Entry e where e.delivery.id = d.id " +
        "and (e.shipment.senderGeography = ?1 or e.shipment.receiverGeography = ?1 or e.collect.geography = ?1)")
List<Delivery> findByGeography(Geography geo);

Это работает, только если я оставил в запросе предложение (e.shipment.senderGeography = ?1 or e.shipment.receiverGeography = ?1) или e.collect.geography = ?1.Но не оба.

...