2014-11-14 9 views
10

Ho 2 tabelle dire Studente e Insegnante e dire che lo Studente ha una relazione Molti-a-Uno con l'Insegnante e dice, IDFunione funge da chiave esterna.Come utilizzare il repository JPA di Spring Data per interrogare da 2 tabelle?

Come posso utilizzare molle metodi di data JPA pronti contro termine, in un certo senso - findByTeacherName, se voglio interrogare qualcosa come di seguito,

select * from Student S, Teacher T 
    where T.teacherName = 'SACHIN' and S.teacherId = T.teacherId 

Nota: Qui voglio query utilizzando solo StudentRepository, che viene creato utilizzando StudentHibernateMapping classe che ha una relazione con TeacherHibernateMapping classe

Qualsiasi aiuto sarà molto apprezzato.

risposta

3

Ci sono molti modi per farlo, leggi la convenzione di method naming che spiega l'uso di proprietà annidate, o per query più complesse usa @Query annotation.

+0

Grazie a @ zoran. In particolare, voglio solo capire se qualcosa come la combinazione di 2 tabelle nella clausola where equivalente, come, "findByTeacherIdAndStudentId" è supportato. Tuttavia, so che funziona con NativeSQl. –

30

Ci sarà un metodo di repository su StudentRepository

List<Student> findByTeacher_TeacherId(String teacherId); 

tuoi entityClass dovrebbero essere come ..

@Entity 
Class Student { 
    @Id 
    String studentId; 
    @ManyToOne 
    private Teacher teacher; 
} 

e insegnante di classe sarebbe ..

@Entity 
Class Teacher { 
    @Id 
    private String teacherId; 
} 

Qui la chiave cosa che devi sapere è:

findBy + (il membro chiave esterna della classe studente con la prima lettera Upper) + underscore + il membro dati della classe insegnante con la prima lettera UpperCase + (String teacherId);

questo vi darà un elenco di studenti che appartengono a tale insegnante

2

Per quanto riguarda Prateek-Singh entità di @, dovrebbe anche essere possibile definire la query senza id affatto, semplicemente il soggetto estero.

List<Student> findByTeacher(Teacher teacher);

Problemi correlati