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

Services Web Java Discussion :

Can't use findOne() dans mon projet Spring boot


Sujet :

Services Web Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2009
    Messages : 95
    Par défaut Can't use findOne() dans mon projet Spring boot
    Salut mes amis
    Je suis entrain de réalisé un projet de spring j'ai une classe de Personne
    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
    @SuppressWarnings("serial")
    @Entity
    public class Personne implements Serializable {
     
    	@Id
    	@GeneratedValue
    	private Long id;
    	@Column(length = 80, name = "NOM")
    	private String nom;
    	@Column(length = 80, name = "PRENOM")
    	private String prenom;
    	@Column(length = 80, name = "ADRESSE")
    	private String adresse;
    	@Column(length = 80, name = "EMAIL")
    	private String email;
    	@Column(length = 80, name = "TELEPHONE")
    	private String telephone;
    //avec les getters et le setters et le constructeurs sans et avec parametres
    et la l'interface IPersonneRepository

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import com.example.entities.Personne;
     
    public interface IPersonneRepository extends JpaRepository<Personne, Long> {
     
    }
    Et le controlleur de personne sous le nom de PersonneController qui définit les methode d'ajout, Modification, Suppression avec l'affichage de toute les personnes

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.DeleteMapping;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.PutMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
     
    import com.example.entities.Personne;
    import com.example.repositories.IPersonneRepository;
     
    @RestController
    @RequestMapping(value = "/personne")
    public class PersonController {
     
    	@Autowired
    	private IPersonneRepository iPersonneRepository;
     
    	@PostMapping(value = "/create")
    	public Personne createPersonne(@RequestBody Personne personne) {
    		return iPersonneRepository.save(personne);
    	}
     
    	@PutMapping(value = "/update/{id}")
    	public Personne updatePersonne(@PathParam(value = "id") Long id, @RequestBody Personne personne) {
    		if (id != null) {
    			Personne p = iPersonneRepository.findOne(id);
    			if (p != null) {
    				iPersonneRepository.save(personne);
    			}
    		}
    		return personne;
    	}
     
    	@DeleteMapping(value = "/delete/{id}")
    	public void delete(@PathParam(value = "id") Long id) {
    		if (id != null) {
    			Personne p = iPersonneRepository.findOne(id);
    			if (p != null) {
    				iPersonneRepository.delete(p);
    			}
    		}
    	}
     
    	@GetMapping(value = "/all")
    	public List<Personne> allPerson() {
    		return iPersonneRepository.findAll();
    	}
     
    	@GetMapping(value = "/per/{id}")
    	public Personne getOne(@PathParam(value = "id") Long id) {
    		if (id != null) {
    			Personne p = iPersonneRepository.findOne(id);
    			return p;
    		} 
     
    	}
    }
    je ne sais pas où du le problème? Pourquoi m'afficher ce message d'erreur sur tout les commandes de findOne "The method findOne(Example<S>) in the type QueryByExampleExecutor<Personne> is not applicable for the arguments (Long)" Malgré que j'ai déjà utilisé le getOne() au lieu de findOne() qui ne me donne pas la même requête pour me recevoir une personne.
    Aider moi SVP

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2009
    Messages : 95
    Par défaut
    J'ai oublié de présenter le fichier de application.properties qui est sous cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    spring.datasource.url = jdbc:mysql://localhost:3306/spring_boot_DB?createDatabaseIfNotExist=true
    spring.datasource.username=root
    spring.datasource.password=
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    spring.jpa.database=MYSQL
    spring.jpa.show-sql = true 
    spring.jpa.hibernate.ddl-auto = update
    spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
    server.port=8081
    Et j'ai changé dans le fichier IPersonRepository d'utiliser CrudRepository au lieu de JpaRepository et même chose même problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import org.springframework.data.repository.CrudRepository;
     
    import com.example.entities.Personne;
     
    public interface IPersonneRepository extends CrudRepository<Personne, Long> {
     
    }

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ben le message est clair, findOne attends que tu lui passe un exemple, sous la forme de l'interface Example<S>, pas un Long. Si tu veux recherche ton élément par id, tu dois utiliser la méthode findById

    }

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2009
    Messages : 95
    Par défaut
    Et pourquoi la méthode findOne(id) ne fonctionne pas? dans l'exemple il utilisait @PathParam(value = "id") et dans mon IDE (dans deux IDEs) même si Je utilisais findOne() le variable id ne détecte pas. Il y a quelque chose qui ne va pas dans la version de mon IDE ou dans l’environnement de travail dans ma porte.

  5. #5
    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
    Par défaut
    Bonjour,

    La méthode findOne de l'interface CrudRepository a été remplacé par findById depuis la version 2.0 de Spring Data Commons, tu ne peux l'utiliser que dans les versions 1.x . Selon le message d'erreur, c'est la méthode findOne de l'interface QueryByExampleExecutor qui est utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface IPersonneRepository extends CrudRepository<Personne, Long>, QueryByExampleExecutor <Personne> {
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Personne p = new Personne();
    p.setId(id);
    Example<Personne> exemple = Example.of(p);
    Personne personne = iPersonneRepository.findOne(exemple);
    A+.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2009
    Messages : 95
    Par défaut La version de spring qui empêche findOne()
    Salut mes amis

    Après avoir une période j'ai trouvé la solution qui due exactement de la version de Spring qui nous utilise dans notre projet. Pour cela les versions spring de série 1.4.5 et quelque autre de suite sont des version qu'il peut utiliser findOne() sans aucun soucie par contre les nouveaux versions n'accepte pas. Et pour cela je devrai utiliser findByid(id).orElse(null);

    Et pour cela notre code sera comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne p = iPersonneRepository.findByid(id).orElse(null);
    et le problème résolu

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

Discussions similaires

  1. Spring : pas de pom.xml dans mon projet
    Par Anonyme1784 dans le forum Build
    Réponses: 3
    Dernier message: 08/11/2017, 06h40
  2. Comment inseré une image dans mon projet?
    Par Micheal1221 dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/07/2006, 14h00
  3. Réponses: 3
    Dernier message: 16/05/2006, 16h34
  4. [D7] Ressource dupliquée dans mon projet
    Par dleu dans le forum EDI
    Réponses: 2
    Dernier message: 27/02/2006, 15h52
  5. [FLASH MX] Incorporer un swf dans mon projet
    Par Toutouffe dans le forum Flash
    Réponses: 2
    Dernier message: 19/01/2005, 12h04

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