2014-06-10 11 views
5

Ho difficoltà a progettare una query in un CrudRepository.CrudRepository: trova per più entità correlate

ho due entità, CourseOffering e Dipartimento (solo il codice rilevante mostrato):

CourseOffering.java:

public class CourseOffering implements Serializable 
{ 
    private Department department; 

    @ManyToOne(fetch = FetchType.LAZY, optional = true) 
    @JoinColumn(name = "DepartmentId", nullable = true) 
    @JsonProperty 
    public Department getDepartment() 
    { 
     return this.department; 
    } 

    public void setDepartment(Department department) 
    { 
     this.department = department; 
    } 
} 

Department.java:

public class Department implements Serializable 
{ 
    private Set<CourseOffering> courses; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "department") 
    public Set<CourseOffering> getCourses() { 
     return this.courses; 
    } 

    public void setCourses(Set<CourseOffering> courses) { 
     this.courses = courses; 
    } 
} 

e il CrudRepository in questione :

CourseOfferingRepository.java:

import java.util.List; 
import edu.ucdavis.dss.dw.entities.CourseOffering; 
import org.springframework.data.repository.CrudRepository; 

public interface CourseOfferingRepository extends CrudRepository<CourseOffering, Long> 
{ 
    CourseOffering getOneByTermIdAndNumberAndDepartmentId(long termId, String number, 
      long departmentId); 

    List<CourseOffering> findByDepartmentCode(String deptCode); 

    //List<CourseOffering> findAllByDepartmentCode(String deptCodes); 

    List<CourseOffering> findByTermCode(String termCode); 
} 

Le tre funzioni in CourseOfferingRepository che non sono commentate funzionano come previsto. Sto cercando di far funzionare il quarto.

Quello che mi piacerebbe fare è poter restituire tutte le CourseOfferings in cui il codice di dipartimento è uno dei molti codici di dipartimento. Si noti che la tabella CourseOffering stessa contiene solo un numero intero di department_id che fa riferimento all'ID nella tabella Department, in cui è archiviato il deptCode effettivo.

Come fare per ottenere che la funzione CrudRepository commentata funzioni correttamente? O in un altro modo, come si fa la versione plurale di "List findByDepartmentCode (String deptCode);"?

Grazie in anticipo per qualsiasi consiglio che puoi offrire.

+2

Does 'findByDeptCodeIn (raccolta deptCodes)' fare ciò che vuoi? – geoand

+0

Sì, grazie! Non sapevo del bit "In" alla fine. – Christopher

+0

Ho aggiunto il commento come risposta :) – geoand

risposta

6

è necessario modificare il codice commentata a:

List<CourseOffering> findByDeptCodeIn(Collection<String> deptCodes)

Partenza this parte della documentazione per vedere quali altre parole chiave sono permessi

+0

Può essere usato anche quando si ha solo la relazione nella classe 'Dipartimento'? (Voglio dire senza avere attributo dipartimento nella classe 'CourseOffering'). – PhoneixS

+0

@PhoneixS Non l'ho provato, ma dubito seriamente che funzioni – geoand

1

Come geoand sottolineato nei commenti, la risposta è:

List<CourseOffering> findByDepartmentCodeIn(List<String> deptCodes); 

Grazie geoand!

+0

Il tuo benvenuto! – geoand

Problemi correlati