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 Boot Java Discussion :

Méthodes findOne et delete non reconnues


Sujet :

Spring Boot Java

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Méthodes findOne et delete non reconnues
    Bonjour

    Je suis le tutoriel : Apprendre à développer les services REST avec Spring Boot et Spring RestTemplate https://bnguimgo.developpez.com/tuto...-resttemplate/ et il me semble qu'il y ait des problèmes de compatibilité concernant la méthode findOne et delete qui se trouvent dans UserController.java.

    Dans le service User, la méthode findOne(Long) n'est plus disponible et j'ai lu dans les commentaires du tuto qu'il fallait la remplacer par findById et la signature devient "Optional<User> getUserById(Long id) throws BusinessResourceException;". Et ça marche.

    Maintenant dans la Class UserController.java , je suis obligé de changer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User userToUpdate = userService.getUserById(id);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Optional<User> userToUpdate = userService.getUserById(id);
    Sauf que les méthodes getRoles, setLogin, setPassword, setActive, saveOrUpdateUser me génèrent des erreurs du genre:

    The method getRoles() is undefined for the type Optional<User>
    Nom : spring.PNG
Affichages : 670
Taille : 54,3 Ko

    Ensuite concernant la méthode delete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	@Override
    	@Transactional(readOnly=false)
    	public void deleteUser(Long id) throws BusinessResourceException {
    		try{
    			userRepository.delete(id);
    		}catch(Exception ex){
    			throw new BusinessResourceException("Delete User Error", "Erreur de suppression de l'utilisateur avec l'identifiant: "+id, HttpStatus.INTERNAL_SERVER_ERROR);
    		}		
    	}
    j'ai ce message d'erreur:

    The method delete(User) in the type CrudRepository<User,Long> is not applicable for the arguments (Long)
    Par quelle méthode dois-je la remplacer pour régler ce problème?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    The method delete(User) in the type CrudRepository<User,Long> is not applicable for the arguments (Long)
    Parce que la méthode delete de ton Repository attend un entité de type User mais pas un Long ni un Optional<User> comme argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    userRepository.delete(user);
    Après tu peux ne pas le charger en mémoire si tu veux le supprimer et que tu as déjà son id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    userRepository.deleteById(id);
    Tu ne nous montres pas les codes où sont déclarés ses méthodes, difficile de t'aider plus.

    A+.

  3. #3
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Apparemment findOne et delete ne sont plus d'actualité. Je les ai remplacées par getOne et deleteById et je n'ai plus d'erreur

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Ce qui est sûr, c'est que tu utilise l'interface JpaRepository.

    Citation Envoyé par momjunior Voir le message
    Apparemment findOne et delete ne sont plus d'actualité.
    Faux, tout dépend de tes besoins.

    Avant la version 2, la méthode findOne se trouvait dans CrudRepository (interface parent de JpaRepository) et retournait une entité, findById n'existait pas encore dans les interfaces. La méthode delete de CrudRepository possèdait 2 signatures, l'un prenant un id et l'autre un entité comme paramètre.

    A partir de la version 2, findOne se trouve dans JpaRepositry (ou l'interface supérieur, à vérifier) et retourne un Optional<T>, une nouvelle méthode findById de CrudRepository pour charger un entité de la base à partir d'un id. La méthode delete n'a qu'une seule signature et attend un entité comme paramètre, une nouvelle méthode deleteById est là pour supprimer à partir d'un id.

    La méthode getOne était toujours présent mais c'est pour chargé un entité déjà présent dans l'EntityManager à partir de son id mais ne le charge pas depuis la base.

    A+.

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

Discussions similaires

  1. méthode protected non reconnue
    Par hug dans le forum Langage
    Réponses: 3
    Dernier message: 23/05/2011, 17h22
  2. Méthode de tableAdapter non reconnue dans le code
    Par bor1s dans le forum ASP.NET
    Réponses: 1
    Dernier message: 03/11/2010, 13h35
  3. méthode non reconnue dans ma jsp
    Par erox44 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 07/08/2009, 13h09
  4. pb JPA méthode non reconnue
    Par Nivrae dans le forum JPA
    Réponses: 6
    Dernier message: 16/05/2008, 11h28
  5. [EJB] [JSP] Méthode EJB non reconnue dans jsp
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/07/2004, 09h52

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