2014-06-10 3 views
5

J'ai des problèmes pour concevoir une requête dans un CrudRepository.CrudRepository: trouver par plusieurs entités connexes

J'ai deux entités, CourseOffering et Département (uniquement le code correspondant indiqué):

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

et la CrudRepository en question :

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

Les trois fonctions dans CourseOfferingRepository qui ne sont pas commentées fonctionnent comme prévu. J'essaie de faire fonctionner le quatrième.

Ce que je voudrais faire est de pouvoir retourner tous les CourseOfferings où le code de département est l'un des nombreux codes de département. Notez que la table CourseOffering ne contient elle-même qu'un nombre entier department_id qui fait référence à l'ID dans la table Department, où le deptCode réel est stocké.

Comment est-ce que je ferais pour commenter la fonction CrudRepository pour fonctionner correctement? Ou, en d'autres termes, comment fait-on la version plurielle de "List findByDepartmentCode (String deptCode);"?

Merci d'avance pour tout conseil que vous pouvez offrir.

+2

Est-ce que 'findByDeptCodeIn (Collection deptCodes)' faire ce que tu veux? – geoand

+0

Oui, merci! Je ne savais pas sur le «In» peu là à la fin. – Christopher

+0

J'ai ajouté le commentaire comme réponse :) – geoand

Répondre

6

Vous devez changer le en commentaire du code pour:

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

Découvrez this partie de la documentation pour voir ce que d'autres mots-clés sont autorisés

+0

Est-ce que cela peut aussi être utilisé quand vous avez seulement la relation dans la classe 'Department'? (Je veux dire sans avoir l'attribut department dans la classe 'CourseOffering'). – PhoneixS

+0

@PhoneixS Je ne l'ai pas essayé, mais je doute sérieusement que cela fonctionnerait – geoand

1

Comme geoand a souligné dans les commentaires, la réponse est:

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

Merci geoand!

+0

Votre bienvenue! – geoand

Questions connexes