[英]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")
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.