web-dev-qa-db-ja.com

JpaRepositoryのコードでfindOne()を使用できません

クラス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();
    }
}

personRepositoryのインターフェースはこちら

package com.example.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import com.example.entities.Personne;

public interface IPersonneRepository extends JpaRepository<Personne, Long> {    

}

そしてコントローラーで、CRUD(作成、読み取り、更新、削除)のメソッドを追加します。これらのメソッドはこのクラスにあります

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;
        } 

    }
}

application.propertiesは

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

CrudRepositoryでJpaRepositoryを変更しようとしましたが、同じ問題は同じ間違いですQueryByExampleExecutorタイプのメソッドfindOne(Example)は引数に適用できません(Long)メソッドをgetOneに変更しようとしました()しかし、完全ではありませんが、以前にこの方法を使用したことがありましたが、今回は機能しません。同じエディターでなぜかわかりません。私がこの種の問題を解決するための技術をまだ持っていなかったことをよく知っています。私に見せてくれた経験、または問題のために助けを求めてくれてありがとう:)

4
BMW83

要件に基づいて、次の2つのオプションを使用してみてください。

_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
_

Spring Data jpaの最近のバージョンでいくつかの変更があり、以前の作業を使用していたfindOne()メソッドが削除されました。あなたは参照のためにここに投稿をチェックすることができます- https://stackoverflow.com/a/44103020/2600196

または、古いSpring Data JPAバージョンに戻します

9
kakabali

findById()の代わりにfindOne()を使用してください。

0
Christopher