Spring CrudRepository - условие «не равно» для дочерней таблицы (которая является списком) - PullRequest
0 голосов
/ 16 января 2019

У меня есть две сущности со связью @OneToMany

Первая сущность

    @Entity
    @Table(name = SchemaConstant.RESCHEDULE_TABLE_NAME)
    public class RescheduleRequestEntity extends BaseEntity {
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO, generator = "RESCHEDULE_ID_GEN")
      @SequenceGenerator(
          name = "RESCHEDULE_ID_GEN",
          allocationSize = 1,
          sequenceName = SchemaConstant.RESCHEDULE_SEQUENCE_NAME)
      private Long id;

      private String adviseNo;
      private LocalDate adviseDate;
      private Long customerId;

      @Enumerated(value = EnumType.STRING)
      private AdviceStatus status;

      @OneToMany(mappedBy = "reschedule", fetch = FetchType.LAZY)
      private List<RescheduleDetailEntity> accountDetails;

    }

Вторая сущность

    @Entity
    @Table(name = "RESCHEDULE_DETAILS")
    public class RescheduleDetailEntity extends BaseEntity {

      @Id
      @GeneratedValue(strategy = GenerationType.AUTO, generator = "RESCHEDULE_DETAILS_ID_GEN")
      @SequenceGenerator(
          name = "RESCHEDULE_DETAILS_ID_GEN",
          allocationSize = 1,
          sequenceName = "S_RESCHEDULE_DETAILS")
      private Long id;

      @OneToOne(fetch = FetchType.LAZY)
      @JoinColumn(name = "ACCOUNT_ID", nullable = false)
      private AccountEntity account;

      @Enumerated(value = EnumType.STRING)
      private AdviceStatus status;

      @Enumerated(value = EnumType.STRING)
      private TenureType tenureType;

      private Integer tenure;

      @ManyToOne
      @JoinColumn(name = "ADVISE_ID")
      private RescheduleDetailEntity reschedule;
    }

И Перечисление

    public enum AdviceStatus {
      OPEN,
      ACTIVE,
      CLOSE
    }

Я хочу получить данные с условием Как

    SELECT *
      FROM RESCHEDULEREQUESTENTITY R, RESCHEDULEDETAILENTITY D
     WHERE R.ID = :PID
       AND D.ADVISEID = R.ID
       AND D.STATUS <> "CLOSE"

"Извлечение данных из RescheduleRequestEntity с данными из RescheduleDetailEntity, где RescheduleDetailEntity.status не равно" CLOSE ", где" Status "- это тип Enum".

Я создаю класс репозитория JPA, например, следующий для выборочных данных

    @Repository
    public interface RescheduleRequestRepository
        extends JpaRepository<RescheduleRequestEntity, Long>, JpaSpecificationExecutor {

      Optional<RescheduleRequestEntity> findByAdviseNo(String adviceNo);

      Optional<RescheduleDetailEntity> findByIdAndAccountDetails_StatusNot(
          Long adviceId, AdviceStatus status);
    }

, но это не выборка данных с моим желаемым условием, это не игнорирование данных, которые имеют статус "ЗАКРЫТЬ"

1 Ответ

0 голосов
/ 16 января 2019

Вы можете сделать это пользовательским запросом, используя аннотацию @Query.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...