Error dans la création d'une fonction dans spring

Fermé
joziphen Messages postés 16 Date d'inscription mardi 30 janvier 2018 Statut Membre Dernière intervention 19 mai 2018 - 3 mai 2018 à 14:56
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 3 mai 2018 à 17:21
Bonjour,



je travaille sur une application spring boot , je veux creer une fonction avec une requete personnalisé mais il m'affiche toujour une exception .
voila mon code entity :

package org.glsid.entities;

import java.io.Serializable;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class personne implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long CIN;
private String nom;
private long num;
private String email;
private String photo;
@OneToMany(mappedBy="person",fetch=FetchType.LAZY)
private Collection<adresse_postal_livraison> add;
@ManyToOne
@JoinColumn(name="typePerson_Id")
private typePerson t;
@ManyToOne
@JoinColumn(name="secteur_Id")
private secteur sect;
@ManyToOne
@JoinColumn(name="categorie_Id")
private categorie catP;
@OneToMany(mappedBy="pers")
private Collection<commande_cli> commande;
@OneToMany(mappedBy="fournisseur")
private Collection<commande_fourn>commandeF;
public long getCIN() {
return CIN;
}
public void setCIN(long cIN) {
CIN = cIN;
}
public String getNom() {
return nom;
}
public Collection<adresse_postal_livraison> getAdd() {
return add;
}
public void setAdd(Collection<adresse_postal_livraison> add) {
this.add = add;
}
public typePerson getT() {
return t;
}
public void setT(typePerson t) {
this.t = t;
}
public secteur getSect() {
return sect;
}
public void setSect(secteur sect) {
this.sect = sect;
}
public categorie getCatP() {
return catP;
}
public void setCatP(categorie catP) {
this.catP = catP;
}
public Collection<commande_cli> getCommande() {
return commande;
}
public void setCommande(Collection<commande_cli> commande) {
this.commande = commande;
}
public Collection<commande_fourn> getCommandeF() {
return commandeF;
}
public void setCommandeF(Collection<commande_fourn> commandeF) {
this.commandeF = commandeF;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public void setNom(String nom) {
this.nom = nom;
}
public long getNum() {
return num;
}
public void setNum(long num) {
this.num = num;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public personne() {
super();
// TODO Auto-generated constructor stub
}
public personne(long cIN, String nom, long num, String email,String photo) {
super();
CIN = cIN;
this.nom = nom;
this.num = num;
this.email = email;
this.photo=photo;
}


}

et voila le code du repository :
package org.glsid.doa;

import java.util.List;

import org.glsid.entities.personne;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;


@Repository
@Component
public interface personeRepository extends JpaRepository<personne,Long> {

@Query("select f from personne f where f.typePerson_Id=:x")
public List<personne> FindbyTypePersonId(@Param ("x")long typePerson_Id);
}

et le code du controller :
package org.glsid.service;

import java.util.List;

import org.glsid.doa.personeRepository;
import org.glsid.entities.personne;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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
public class personneRestService {
    @Autowired
    private personeRepository per;
@RequestMapping(value="/fournisseurs", method=RequestMethod.GET)
public List<personne> listFourn(@RequestParam(name="typePerson_Id") long typePerson_Id){

    return per.FindbyTypePersonId(2);
}

mais il affiche cette exception :
Caused by: org.hibernate.QueryException: could not resolve property: typePerson_Id of: org.glsid.entities.personne
Caused by: org.hibernate.QueryException: could not resolve property: typePerson_Id of: org.glsid.entities.personne [select f from org.glsid.entities.personne f where f.typePerson_Id=:x]

Validation failed for query for method public abstract java.util.List org.glsid.doa.personeRepository.FindbyTypePersonId(long)

Error creating bean with name 'personeRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List org.glsid.doa.personeRepository.FindbyTypePersonId(long)!

Error creating bean with name 'personneRestService': Unsatisfied dependency expressed through field 'per'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personeRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List org.glsid.doa.personeRepository.FindbyTypePersonId(long)!

svp aidez moi , c'est quoi l'erreur que j'ai fais??
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
3 mai 2018 à 16:05
Bonjour,

Quand on fait du Java EE, il faut être très rigoureux sur le respect des conventions de nommage.
Les framework comme Spring se basent sur ces conventions pour leur fonctionnement et au moindre écart Spring va être perdu car il va chercher une méthode qui aurait du s'appeler d'une certaine manière mais qu'il ne trouvera pas car tu l'auras nommé d'une toute autre manière totalement imprévisible.

Genre : les noms de classes/interfaces commencent par une majuscule, les noms de méthodes par une minuscule, aucun nom ne contient de underscores (sauf les constantes) et tout doit être en CamelCase.

Donc
org.glsid.doa.personeRepository.FindbyTypePersonId(long typePerson_Id)
c'est tout faux...
La bonne écriture devrait être
org.glsid.doa.PersonRepository.findByTypePersonId(long typePersonId)
.

Mais ça ne fonctionnera que si la classe Person (avec un P majuscule) possède une méthode
getTypePersonId()
et pour l'instant ce n'est pas le cas...

La documentation de référence : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
0
joziphen Messages postés 16 Date d'inscription mardi 30 janvier 2018 Statut Membre Dernière intervention 19 mai 2018
3 mai 2018 à 16:13
merci pour votre reponse je vais modifier le code
0
joziphen Messages postés 16 Date d'inscription mardi 30 janvier 2018 Statut Membre Dernière intervention 19 mai 2018
3 mai 2018 à 16:52
j'ai fais ce que vous m'avez dit mais ca reste le meme erreur :/
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > joziphen Messages postés 16 Date d'inscription mardi 30 janvier 2018 Statut Membre Dernière intervention 19 mai 2018
3 mai 2018 à 17:21
Si c'est exactement la même erreur c'est que tu n'as rien corrigé.

A minima le nom des classes et des méthodes dans les messages d'erreurs devraient correspondre à ceux que tu as changé.
0