2015-10-30 20 views
14

ho entità User e TestPrimavera dati JPA: interrogazione ManyToMany

@Entity 
public class User { 
    private Long id; 
    private String userName; 
} 

@Entity 
public class Test { 
    private Long id; 

    @ManyToMany 
    private Set<User> users; 
} 

posso ottenere tutte le prove per entità User:

public interface TestRepository extends JpaRepository<EventSettings, Long> { 
    List<Test> findAllByUsers(User user); 
} 

Ma che domanda posso utilizzare per la ricerca di tutte le prove da userName ?

risposta

37

Il seguente firma di metodo l'otterrà vuole a voler:

List<Test> findByUsers_UserName(String userName) 

Questo sta usando la funzione property expression della primavera dati JPA. La firma Users_UserName verrà convertita in JPQL x.users.userName. Si noti che questo eseguirà una corrispondenza esatta sul nome utente specificato.

+1

come fare questo in JPQL (in annotazione Query)? –

+0

può essere raggiunto utilizzando join. guarda la mia risposta – ArslanAnjum

+0

Soluzione eccezionale, grazie mille! Ho cercato per un po '. – dave0688

0

Un'altra risposta indica come ottenere la funzionalità desiderata utilizzando la tecnica di denominazione delle funzioni. Possiamo ottenere la stessa funzionalità usando l'annotazione @Query come segue:

@Query("select t from Test t join User u where u.username = :username") 
List<Test> findAllByUsername(@Param("username")String username); 
+0

Ma perché però? –

Problemi correlati