繁体   English   中英

Spring数据:多对多关系中的findByEntityNot()

[英]Spring Data: findByEntityNot() in a many to many relationship

我有以下多对多关系:

@Entity
public class Foo implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @JsonIgnore
  @ManyToMany
  @JoinTable(name = "foo_bar",
      joinColumns = {@JoinColumn(name = "foo_id", referencedColumnName = "id")},
      inverseJoinColumns = {@JoinColumn(name = "bar_name", referencedColumnName = "name")})
  private Set<Bar> bars = new HashSet<>();

}

@Entity
public class Bar implements Serializable {

  @Id
  private String name;

}

现在,我要查询FooRepository中所有不包含名称为“ example”的Bar的Foo。 我试图在FooRepository中使用以下Spring数据方法:

findByBars_NameNot(String barName);

但这会返回数据透视表foo_bar的每个条目之一,该条目的bar_name列中没有“ example”。 这意味着它可以返回重复的Foo对象以及实际上包含名称为“ example”的Bar的Foo对象,即,它等效于以下SQL:

SELECT * FROM myschema.foo_bar WHERE bar_name != "example";

Spring数据中有什么好方法可以编写存储库方法来执行我正在尝试的操作?

我发现以下本机查询可以满足我的需要,但是我犹豫是否要使用本机查询,因为我觉得这样做更干净:

SELECT * FROM myschema.foo WHERE id NOT IN (SELECT foo_id FROM myschema.foo_bar WHERE bar_name = "example")

Spring Data JPA文档

public interface FooRepository extends JpaRepository<Foo, Long> {

  @Query("SELECT f FROM Foo f WHERE NOT EXISTS (SELECT b FROM f.bars b WHERE b.name = ?1)")
  Foo findByNotHavingBarName(String name);
}

不幸的是,在从方法名称创建查询时不支持EXISTS查询

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM