2017-06-29 19 views
0

述語BooleanExpressionを使用して多対多リレーションに対して内部結合を行うにはどうすればよいですか? QueryDSLの多対多リレーションの述語BooleanExpressionの作成方法

は、私は今、私は述語のクエリとのレポを使用したい

public interface Arepo extends BaseRepository<A, Integer>, 
    QueryDslPredicateExecutor<A> { 
    Page<A> findAll(Predicate predicate, Pageable pageRequest); 

} 

のために2つのエンティティ

public class A { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

@ManyToMany(fetch = FetchType.LAZY, 
    cascade = { CascadeType.DETACH, CascadeType.MERGE, 
     CascadeType.REFRESH, CascadeType.PERSIST}) 
    @JoinTable(name = "a_b_maps", 
     joinColumns = @JoinColumn(name = "a_id", nullable = 
      false,referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "b_id", nullable = false, 
     referencedColumnName = "id") 
) 
    private Set<B> listOfB = new HashSet<B>(); 
} 


public class B { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

@ManyToMany(fetch = FetchType.LAZY, 
    cascade = { CascadeType.DETACH, CascadeType.MERGE, 
     CascadeType.REFRESH, CascadeType.PERSIST}) 
    @JoinTable(name = "a_b_maps", 
     joinColumns = @JoinColumn(name = "b_id", nullable = 
      false,referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "a_id", nullable = false, 
     referencedColumnName = "id") 
) 
    private Set<A> listOfA = new HashSet<A>(); 
} 

ベースレポ

@NoRepositoryBean 
public interface BaseRepository<E, I extends Serializable> 
    extends JpaRepository<E, I> { 

} 

とリポジトリクラスを持っています。私は今、私はJPQLQueryを形成することが可能ですが、リポジトリは述語を期待

QA a = QA.a; 
QB b = QB.b; 
BooleanExpression boolQuery = null; 
JPQLQuery<A> query = new JPAQuery<A>(); 
    query.from(a).innerJoin(a.listOfB, b) 
    .where(b.id.in(someList)); 

をしようとしたいくつかの特定の旅館

に基づいてロードすることができ述語を形成する必要があります。 JPQLQueryからPredicateを取得するにはどうすればよいですか?

または、内部結合は述語を使用してどのように達成できますか?

答えて

0

私はここ

https://stackoverflow.com/a/23092294/1969412与えられた答えの助けを借りて、述語を作成することができています。

SO、代わりにJPQLQueryを使用して、私は直接、これは魅力のように働いている

a.listOfB.any() 
     .id.in(list); 

を使用しています。

関連する問題