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

Développement Web en Java Discussion :

Aide comprehension spring data repositories


Sujet :

Développement Web en Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Par défaut Aide comprehension spring data repositories
    Bonjour à tous,

    J'ai besoin de votre aide car on m'a donné un exercice à faire mais je ne comprend pas du tout le code.

    Tout d'abord on a une classe repository :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package school.movies.code;
     
    import org.springframework.data.repository.Repository;
    import org.springframework.transaction.annotation.Transactional;
     
    @Transactional(readOnly = false)
    public interface MovieRepository extends Repository<Movie, Long> {
     
        void delete(Long movieNumber);
     
        List<Movie> findAllBy();
     
    }
    et ensuite on a un service qui utilise ce repository

    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
     
    @Service
    public class MovieService {
     
        private final MovieRepository movieRepository;
     
        @Autowired
        public MovieService(MovieRepository movieRepository) {
            this.movieRepository= movieRepository;
        }
     
        public List<Movie> getMovies() {
            return movieRepository.findAllBy();
        }
     
        public void delete(Long movieNumber) {
            movieRepository.delete(movieNumber);
        }
     
    }
    Ce que je ne comprend pas c'est que l'interface MovieRepository n'est implémenté nulle part, il n'y as pas de classe MovieRepositoryImpl qui implémente ses méthodes. Pourtant malgrès cela les méthodes delete et getMovies de MovieService fonctionnent alors qu'elles utilisent les méthodes de l'interface. Du coup je ne comprend pas pourquoi ca fonctionne vu que on a pas implémenté les méthodes delete et findAllBy de l'interface.

    Est-ce que vous sauriez m'eclairer?

  2. #2
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 509
    Par défaut
    Bonjour SEIYA,

    Je ne suis pas un pro, mais je vais essayer de te donner les infos que je pense correct.

    ton interface MovieRepository est implementer garce a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Autowired
        public MovieService(MovieRepository movieRepository) {
            this.movieRepository= movieRepository;
        }
    C'est appeler de l'injection de dépendance, et du coup tu peux utiliser tes méthodes directement.
    Tu peux regarder de ton coté à quoi correspond @Autowired.

    En espérant que je n'ai pas raconté trop de bêtise par rapport à ce que j'ai appris dans mes cours

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur en génie logiciel
    Inscrit en
    Juin 2012
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en génie logiciel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 942
    Par défaut
    le repository sera implémentée par spring, tu as rien à faire, dans cet interface tu peux aussi créer tes requêtes l'annotation @Query

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @Modifying
    @Query("delete Movie m where m.title = 'Test'")
    int deleteTestMovie();
    par contre si tu veux faire tes requêtes via un EntityManager, tu dois implémenter un repository

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Par défaut
    Merci beaucoup pour vos réponses, je comprend déjà mieux

    Citation Envoyé par marc.collin Voir le message
    le repository sera implémentée par spring, tu as rien à faire
    C'est justement cela que j'ai du mal à comprendre, comment savoir quels méthodes serons implémentés par spring pour Repository. Dans mon exemple ils ont mis une méthode void delete(Long movieNumber) mais d'où elle vient?

    Est-il possible d'avoir la liste des méthodes qui serons implémentés automatiquement?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Par défaut
    finalement j'ai trouvé la réponse à ma dernière question.

    Maintenant je fais face à une nouvelle problématiques.

    Les films ont une relation one to many avec les acteurs
    @OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Actors> actors;

    et les acteurs ont une relation one to many avec les Manageurs
    @OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Manager> managers;

    Mon problème c'est que je dois implémenté un service qui va filtrer les films et ne remonter que ceux qui ont au moins un acteur ayant un manager avec le nom donné. En sql d'habitude cela se fait en faisant des jointures et en utilisant les clef étrangères mais là je ne vois pas comment faire car il n'y a pas de clef étrangère la relation est juste déclaré en mettant "Set<Manager> managers"

    Est-ce que vous sauriez m’éclairer?

    merci d'avance je suis totalement perdu pour l'instant

    J'ai commencé à écrire cela mais comme je le disais je ne vois pas comment faire les jointures sans clef étrangères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @Query("select id From Movie as m join Actor as a on m. = a.")
        List<Movie> getMoviesByManagerName(String managerName);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Par défaut
    je vais mettre ma deixueme question dans un autre post je pense. Celui là est résolu. Merci à tous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Framework] Spring MVC, Spring Core, Spring Data Repository
    Par tigeline01 dans le forum Spring
    Réponses: 1
    Dernier message: 28/04/2016, 13h28
  2. [Security] Mapper des infos LDAP vers un bean custom à l'aide de spring security
    Par thierryler dans le forum Spring
    Réponses: 3
    Dernier message: 26/07/2012, 10h03
  3. Aide comprehension script car Débutant
    Par quicksilv86 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 11/03/2010, 10h49
  4. aide comprehension d'un script
    Par eveilside dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/06/2007, 16h25
  5. [Integration] Demande d'aide sur spring 2 et JMS
    Par cooltwan dans le forum Spring
    Réponses: 2
    Dernier message: 20/03/2007, 12h15

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