2017-12-21 1 views
0

에 많은에 findByEntityNot() 나는 많은 관계로 다음과 같은 많은 사람들이 있습니다봄 데이터 : 많은 관계

@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을 조회 할 "예". 나는 FooRepository에서 다음 봄 데이터 방법을 사용하려고 :

findByBars_NameNot(String barName); 

를하지만이는 bar_name 열에서 "예"를 가지고 있지 않은 피벗 테이블 foo_bar의 모든 항목 중 하나를 반환. 를 작성하는 봄의 데이터에 어떤 좋은 방법이 있나요

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

: 이것은 중복 푸 실제로는 다음과 같은 SQL과 동등의, 즉 이름이 "예"가있는 줄을 포함 할 푸 객체뿐만 아니라 객체를 반환 할 수 있다는 것을 의미합니다 내가 시도하고있는 것을하기위한 저장소 방법?

내가 필요하지 않습니다하지만 난이 일을하는 청소기 방법이 느낌이 나는 네이티브 쿼리를 사용하기 주저하는 다음과 같은 기본 쿼리를 발견 :

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

답변

1

Spring Data JPA docs

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); 
} 
에서가

불행하게도, 응답에 대한 query creation from method names

+0

감사에서 EXISTS 쿼리에 대한 지원은 없습니다! 스프링 데이터 메소드 네이밍에 대한 지원이 없다는 것은 수치스러운 일입니다.하지만 이것은 분명히 제가 시도한 것보다 훨씬 더 정돈 된 것입니다! – Plog