J'ai un projet avec la classe Personne
package com.example.entities;
import Java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@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;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getAdresse() {
return adresse;
}
public void setAdresse(String adresse) {
this.adresse = adresse;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public Personne() {
super();
}
}
et l'interface de PersonRepository est ici
package com.example.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.entities.Personne;
public interface IPersonneRepository extends JpaRepository<Personne, Long> {
}
Et dans le contrôleur, j'ajoute la méthode de CRUD (créer, lire, mettre à jour et supprimer) ces méthodes sont dans cette classe
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;
}
}
}
le fichier application.properties est
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
J'ai essayé de changer le JpaRepository dans CrudRepository mais le même problème, la même erreur est La méthode findOne (Example) dans le type QueryByExampleExecutor n'est pas applicable pour les arguments (Long) j'ai essayé de changer la méthode pour getOne () mais ce n'est pas parfait j'ai déjà utilisé cette méthode avant mais cette fois ça ne marche pas je ne sais pas pourquoi dans le même éditeur. Je sais très bien que je n'avais pas encore les techniques pour résoudre ce genre de problème à cause de l'expérience que je vous demande de me montrer ou à cause du problème et merci d'avance pour l'aide :)
Essayez d'utiliser les 2 options suivantes en fonction de l'exigence: -
yourRespository.findById(id).get();// it will return an Optional instead of null
yourRespository.findById(id).orElse(null); // this will return null if you have proper null checks
Il y a eu quelques changements avec les versions récentes de Spring Data JPA et ils ont supprimé la méthode findOne()
qui utilisait le travail plus tôt. vous pouvez consulter le post ici pour référence - https://stackoverflow.com/a/44103020/2600196
Ou revenir à l'ancienne version jpa des données du printemps
Utilisez findById()
au lieu de findOne()
.