Spring Data JPA规范,用于与另一个实体没有关系的实体,但是最后一个必须用于过滤

时间:2020-03-27 09:45:58

标签: java join spring-data-jpa criteria-api

我需要根据TableB内@ElementCollection中的值在TableA中搜索记录。 这是最后一次重构后的当前结构(我将忽略冗余代码):

@Entity
public class TableA {
  @Id
  public Long id;
}
@Entity
public class TableB {
  @Id
  public Long id

  @ElementCollection(fetch = FetchType.EAGER)
  @CollectionTable(name = "tableA_assignment", joinColumns = @JoinColumn(name = "tableB_id"))
  private List<TableAAssignment> enpAssignments = new ArrayList<>();
}
@Embeddable
public class TableAAssignment {
  @NotNull
  @OneToOne
  private TableA tableA;

在重构之前,我们具有TableA的以下结构:

@Entity
public class TableA {
  @Id
  public Long id;

  @ManyToMany(mappedBy = "tableas")
  private Set<TableB> tableBs = new HashSet<>();
}

并使用rsql-parser,我们可以执行以下操作: search=tableBs=isempty=false;status=='ACCEPTED'&page=0&size=20,其中=isempty=是我们的自定义运算符。

但是现在RsqlParser由于缺少tableBs属性而无法创建正确的规范。 我们无法从生产中删除此过滤器,但是由于它来自外部,因此不得不将TableA与自己的逻辑分开。

0 个答案:

没有答案