2017-06-29 7 views
0

Wie kann innere Join auf Viele zu viele Beziehungen mit Predicate BooleanExpression getan werden?Wie Prädikat erstellen Boolescher Ausdruck für viele zu viele Beziehungen in QueryDSL

Ich habe 2 Einheiten

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>(); 
} 

A Basis Repo

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

} 

Und ein Repository-Klasse für ein

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

} 

Jetzt möchte ich eine Repo mit Prädikats Abfrage verwenden. Ich brauche ein Prädikat zu bilden, wo ich A basierend auf einigen bestimmten Bs lade

I

versuchte
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)); 

Jetzt ist mir die Lage, ein JPQLQuery zu bilden, aber das Repository erwartet ein Prädikat. Wie kann ich Prädikat von der JPQLQuery erhalten?

Oder wie kann die innere Verbindung mit Predicate erreicht werden?

Antwort

0

Ich bin in der Lage ein Prädikat mit Hilfe der Antwort hier gegebenen

https://stackoverflow.com/a/23092294/1969412 zu erstellen.

SO statt JPQLQuery zu verwenden, ich bin mit direkt

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

Dies ist wie ein Zauber funktioniert.

Verwandte Themen