Spring CrudRepository-子表(作为列表)的“不等于”条件

时间:2019-01-16 05:04:09

标签: java jpa spring-data-jpa

我有两个具有@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;
    }

AND枚举

    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”为枚举类型。”

我创建了一个如下所示的JPA存储库类,以获取数据

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

      Optional<RescheduleRequestEntity> findByAdviseNo(String adviceNo);

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

但它不是在符合我期望的条件下获取数据,也不是在忽略状态为“ CLOSE”的数据

1 个答案:

答案 0 :(得分:0)

您可以使用@Query注释使其成为自定义查询。