springboot2.x整合spring-data-jpa的問題


今天使用springboot整合spring-data-jpa遇到一些問題,直接使用JpaRepository的getOne()方法是會報錯的。報錯信息為:org.hibernate.LazyInitializationException: could not initialize proxy - no Session。在SpringBoot1.xx版本應該使用findOne()方法根據主鍵來查找對象。

這里是findOne和getOne的區別:

getOne API:返回對具有給定標識符的實體的引用。當我查詢一個不存在的id數據時,直接拋出異常,因為它返回的是一個引用,簡單點說就是一個代理對象。

findOne API:按ID查找實體。當我查詢一個不存在的id數據時,返回的值是null.

詳細對比參考這里

但是新版本的JPA中,已經不存在用ID查找實體的findOne方法了,取而代之的是:findById().get()方法。

spring配置如下:

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://172.16.80.34:3307/jpa?useUnicode=true&characterEncoding=UTF8
    driver-class-name: com.mysql.cj.jdbc.Driver


  jpa:
    hibernate:
# 更新數據表結構
      ddl-auto: update
    show-sql: true
    open-in-view: true

實體類:

package com.wang.springboot06jap.entity;

import javax.persistence.*;

//使用JPA注解配置映射關系
@Entity
@Table(name = "tbl_user") //配置表名,若省略則默認表名是user
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //自增主鍵
    private Integer id;
    @Column(name = "lastName",length = 20)  //若省略就是屬性名
    private String username;
    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Reposity:

public interface UserRepository extends JpaRepository<User,Integer> {

}

調用JPAReposity的方法:

@Controller
public class UserController {
@Autowired
UserRepository userRepository;

@GetMapping("/user/{id}")
@ResponseBody
public User getUser(@PathVariable("id") Integer id){
User user = userRepository.findById(id).get();
// System.out.println(userRepository.getOne(id));

//
return user;
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM