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 :

JpaRepository et filtre des entités


Sujet :

Spring Java

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut JpaRepository et filtre des entités
    Bonjour à tous,

    Je migre un projet vers Java / Spring / Spring Boot et étant débutant je ne sais pas si je vais dans le bon sens. Voici mon soucis :

    Pour le moment j'ai câblé le système d'authentification (JWT, UserDetails etc.). Niveau données j'utilise les JpaRepository, @Entity etc. que je trouve bien pratique.

    Dans ma BDD j'ai une table t_users ainsi qu'une table t_points qui référence un id_user(t_users.id). J'ai un utilisateur A et un utilisateur B.

    J'ai fait une route /points/{id} et ma question est comment faire en sorte que ça renvoie une 404 parce que même si le point existe en BDD, c'est l'utilisateur A qui le cherche alors qu'il appartient à l'utilisateur B ?

    En code j'ai ça (non testé) :

    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
     
    package com.elise.waypoint.dao;
     
    import com.elise.user.model.User;
    import com.elise.waypoint.model.Waypoint;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
     
    import java.util.Optional;
     
    public interface WaypointDao extends JpaRepository<Waypoint, Long>
    {
      @Query("SELECT p.x, p.y FROM t_points p INNER JOIN t_users u WHERE u.id = p.user_id AND u.id = ?")
      Optional<Waypoint> findById(Long id);
    }
    Comment je transmets le Personal.getId() pour remplir le "?" de la requête ?

    Autre question : Est-ce qu'il n'y a pas moyen de s'en sortir en câblant toutes les entités et en les annotations relationnelles (@OneToMany, @ManyToMany, etc.) plutôt que mettre les requêtes dans le code avec @Query ? Ce sera un peu fastidieux mais au moins ça ne mélange pas l'ORM avec du DirectQuery, et j'ai le sentiment que ça utiliserai au max les capacités d'IntelliJ pour prévenir d'incohérences en codant plutôt que les déboguer à l'exécution.

    Merci pour vos lumières.

    A très bientôt,
    Kin
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Citation Envoyé par mister3957 Voir le message

    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
     
    package com.elise.waypoint.dao;
     
    import com.elise.user.model.User;
    import com.elise.waypoint.model.Waypoint;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
     
    import java.util.Optional;
     
    public interface WaypointDao extends JpaRepository<Waypoint, Long>
    {
      @Query("SELECT p.x, p.y FROM t_points p INNER JOIN t_users u WHERE u.id = p.user_id AND u.id = ?")
      Optional<Waypoint> findById(Long id);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      @Query("SELECT p.x, p.y FROM t_points p INNER JOIN t_users u WHERE u.id = p.user_id AND u.id = :k)
      Optional<Waypoint> findById(@Param("k") Long id);

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Merci pour la réponse.

    Mais je n'ai pas bien compris. Comment puis-je spécifier "k" lorsque j'appelle le DAO : waypointDao.findById(id) ?

    Merci beaucoup
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

Discussions similaires

  1. [VB.Net]Conversion des entités XML
    Par azerty25 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2006, 07h06
  2. [VB.NET]comment on filtre des chaines de caractères ?
    Par zouhib dans le forum Windows Forms
    Réponses: 61
    Dernier message: 14/06/2006, 14h33
  3. identification des entités
    Par Eric26 dans le forum Schéma
    Réponses: 10
    Dernier message: 02/06/2006, 18h23
  4. [Tableaux] décoder des entités
    Par stehga dans le forum Langage
    Réponses: 6
    Dernier message: 16/01/2006, 12h53
  5. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14

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