2017-02-23 2 views
0

Ich verwende Spring Data JPA für meine Repository-Schicht und Federsicherheit als meine Sicherheitsschicht. In meinem Projekt habe ich die folgende unidirektionale Eins-zu-Viele-Beziehung zwischen Abteilung und Mitarbeiter. Im Folgenden sind Snippets der 2 Entitäten.Finden Sie Entität gefiltert durch eine verwandte Entität, die in einer Auflistung ist

@Entity 
public class Department { 
    ... 

    @OneToMany 
    @JoinColumn(name="department") 
    private Set<Employee> members;   

    ... 
} 

@Entity 
public class Employee { 
    ... 

    private String username; 

    ... 
} 

Die Beziehung hat aufgrund bestimmter Einschränkungen unidirektional zu sein und ein meines Anwendungsfalles ist die Abteilung eines angemeldeten Benutzer zu finden.

Meine Frage ist, wie ich eine Abteilung Entity basierend auf dem aktuellen Benutzer herausfiltern (d. H. Der aktuelle angemeldete Benutzer muss 1 Mitarbeiter-Objekt über das Feld Benutzername entsprechen) entweder mit Federdaten abfragen Methoden oder jpql?

Antwort

0

ich herausgefunden, wie kann meine Anforderung mit dem Employee-Objekt, sondern nur den Benutzernamen zu vergleichen, ohne dass über Spring Data JPA @Query Ansatz erfüllt werden.

@Query("select dept from Department dept inner join dept.members member where member.username = ?1") 
Department findDeptByQuery(String username) 
1

Mit JPQL können Sie MEMBER OF Sammlungsprädikat verwenden.

//Fetch <YOUR EMPLOYEE ENTITY TO MATCH> or 
//Create an new EMPLOYEE object with its primary key prepopulated if you already know it. 
Query query = SELECT d FROM Department d WHERE :employee MEMBER OF d.members 
query.setParameter("employee", <YOUR EMPLOYEE ENTITY TO MATCH>); 
query.list(); 
+0

Ihre Antwort war in der Nähe. Ich suchte jedoch nach einem Ansatz, der keinen Vergleich mit einem Objekt erfordert. – Qcumber

Verwandte Themen