IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

spring requete complexe


Sujet :

Spring Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut spring requete complexe
    Bonjour,

    j'ai une requête un peu complexe à faire avec spring et je n'ai pas trouvé dans la documentation...

    J'ai un objet : Film
    Integer id
    String titre
    Set<Acteur>
    Et un objet : Acteur
    Integer id
    String name
    String forName
    Dans mon repository, j'aimerai une requête qui liste les films qui contiennent un acteur donné.

    la requête Iterable<Film> findByActeur(Acteur acteur); ne fonctionne évidement pas.

    Quelle requête pourrait correspondre à mon besoin ?
    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    je pense qu'il y a un moyen d'utiliser direct des requête sql

    regarde cet exemple qui me permet de récupérer une liste de contact par mot clé:

    dans le ContactRepository qui hérite de JpaRepository :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package org.sid.dao;
     
     
    import org.sid.entities.Contact;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.data.repository.query.Param;
     
    public interface ContactRepository extends JpaRepository<Contact, Long>{
     
    	// :x est le paramètre
    	//la méthode chercher est une sorte de méthode similaire à, par exemple, ContactRepository.findAll()
    	//mais comme checher n'existe pas alors on vient la créer ici en spécifiant ce qu'elle fait avec rqête sql
    	@Query("SELECT c FROM Contact c WHERE c.nom LIKE :x")
    	public Page<Contact> chercher(@Param("x")String mc/*mot clé*/, Pageable pageable); //il y a une pagination avec Pageable je ne sais pas si on peut faire sans
    }

    après dans la classe où tu expose les services (pour moi c ContcatRestService) tu mettras ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package org.sid.web;
     
    import java.util.List;
     
    import javax.websocket.server.PathParam;
     
    import org.sid.dao.ContactRepository;
    import org.sid.entities.Contact;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestAttribute;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
     
    @RestController //Il s'agit d'un controller classique de Spring. 
    			// Il permet de faire la conversion JSON -> Objet et inversement automatiquement grace à Spring 4
    @CrossOrigin("*") //j'autorise les navigateur à acceder ici via une url TRES IMPORTANT SANS CA CA NE MARCHERA PAS !
    public class ContactRestService {
     
    	@Autowired // injecter ta dépendance 
    	private ContactRepository contactRepository;
     
     
     
    	@RequestMapping(value="/chercherContact",method=RequestMethod.GET)
    	public Page<Contact> chercher(
    			@RequestParam(name="mc", defaultValue="") String mc/*motclé*/,
    			@RequestParam(name="page", defaultValue="0") int page,
    			@RequestParam(name="size", defaultValue="5")int size){
    		return contactRepository.chercher("%"+mc+"%", new PageRequest(page, size));
    	}
    }
    si t'as compris ça, tu devrais pourvoir adapter à ton besoin: ce qui t’intéresse c'est l'utilisation de la requête sql, elle te permettra d'affiner ta recherche de films selon les acteurs... donc vas dans ce sens

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse.
    Je me suis inspiré de ton code et j'ai ce qui suit qui fonctionne chez moi :

    // mon Repository
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public interface FilmRepository extends CrudRepository<Film, Integer> {
     
    	// Selection des films contenant un acteur donné
    	@Query(" select distinct f from film f inner join f.acteurs act where act like (?1) ")
    	Iterable<Film> searchFilmsByActeur(Acteur acteur);
     
    }


    // mon Service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    @Service
    public class FilmService {
     
    	private FilmRepository filmRepository;
     
    	@Autowired
    	public FilmService(FilmRepository filmRepository;) {
    		this.filmRepository; = filmRepository;;
    	}
     
    	// Selection des films contenant un acteur donné
    	public Iterable<Film> findByActeur(Acteur acteur) {
    		Iterable<Film> filmList = filmRepository.searchFilmsByActeur(acteur);
    		return filmList;
    	}
     
    }
    Merci à toi !

Discussions similaires

  1. [hibernate][spring]requete select from where IN
    Par whilecoyote dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/04/2006, 09h06
  2. requete complexe
    Par nicohugo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/03/2006, 08h10
  3. Requete complexe
    Par d1g-2-d1g dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/05/2005, 14h47
  4. Requete complexe
    Par Pfeffer dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/02/2005, 17h42
  5. requete complexe
    Par Thunder_nico dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/10/2004, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo