Одиночный @Query не соответствует тем же результатам, что и совокупное несколько @Query - PullRequest
1 голос
/ 17 апреля 2020

Я использую Spring Data JPA 1.11.8 с Eclipselink, работающим на Weblogic12 C, подключенном к Oracle12 BDD. Мне нужна помощь, чтобы понять, почему этот @Query (10 результатов):

1)

@Query("SELECT r FROM R r WHERE " +
            "r.status = com.package.Status.PENDING AND (" +
            "( (r.type = com.package.Type.TYPE_B OR r.type = com.package.Type.TYPE_C) AND r.adminOp.code = :code ) OR " +
            "(r.type = com.package.Type.TYPE_A AND r.adminAsking.code = :code) )")
List<R> findAll(@Param("code") String code);

возвращает результаты, отличные от суммы этих трех (9 результатов):

2)

@Query("SELECT r FROM R r WHERE r.status = com.package.Status.PENDING AND r.type = com.package.Type.TYPE_A AND r.adminAsking.code = :code")
List<R> findAllTypeA(@Param("code") String code);

3)

@Query("SELECT r FROM R r WHERE r.status = com.package.Status.PENDING AND r.type = com.package.Type.TYPE_B AND r.adminOp.code = :code")
List<R> findAllTypeB(@Param("code") String code);

4)

@Query("SELECT r FROM R r WHERE r.status = com.package.Status.PENDING AND r.type = com.package.Type.TYPE_C AND r.adminOp.code = :code")
List<R> findAllTypeC(@Param("code") String code);

Я не уверен, что неправильно понял концепцию SQL, или это связано с JPQL ... но это сводит меня с ума. Сначала @Query возвращает записи, соответствующие запросам 3 и 4, но записи из запроса 2 не представлены.

SQL Таблицы:

CREATE TABLE R (
  UUID NUMBER(19) NOT NULL,    
  TYPE VARCHAR2(50) NULL,    
  STATUS VARCHAR2(50) NULL,
  ADMINOP_UUID NUMBER(19) NULL,    
  ADMINASKING_UUID NUMBER(19) NULL,  
  CONSTRAINT PK_R_REPRESENTACIO PRIMARY KEY (UUID)
);

CREATE TABLE ADMIN (
  UUID  NUMBER(19) NOT NULL, 
  CODE VARCHAR2(50) NOT NULL,
  ...
  PRIMARY KEY (UUID)
);

плюс FK ...

Entities:

@Entity
@Table(name = "R")
public class R {

    @ManyToOne
    private Admin adminOp;

    @ManyToOne
    private Admin adminAsking;

    @Enumerated(EnumType.STRING)
    private com.package.Status status;

    @Enumerated(EnumType.STRING)
    private com.package.Type type;

    ...
}

@Entity
@Table(name = "ADMIN")
public class Admin {
        @Id
        private Long uuid;
        private String code; 

        ....
}

Что я делаю не так?

PS: сначала было приемлемо задать 3 запроса, но теперь мне нужно быть Page результат, и мне нужно запросить все записи сразу.

PS2: я пытался проанализировать сгенерированный родной SQL, но не понимаю, что не так: S

PS3: я также пытался запустить нативный SQL с такими же результатами

...