Spring Boot中JPA使用getOne()查询报错。org.hibernate.LazyInitializationException: could not initialize proxy

DAO代码

public interface UserRepository extends JpaRepository<User,Integer> {

}

Controller

@RestController
public class JpaController {

    @Autowired
    UserRepository userRepository;

    @GetMapping("/user/{id}")
    //@Transactional
    public User getUser(@PathVariable("id") Integer id){
        User user = userRepository.getOne(id);
        return user;
    }
}

请求 localhost:8080/user/1 时,查询报错。

错误详情

There was an unexpected error (type=Internal Server Error, status=500).
Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; 
nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 
No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and 
no properties discovered to create BeanSerializer 
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
(through reference chain: com.dysy.sbjpa.entity.XXX
$HibernateProxy$Z8tP2uCb["hibernateLazyInitializer"])
org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection of role:
XXX, could not initialize proxy - no Session

错误原因

getOne() 方法使用的懒加载,获取到的只是代理对象。

解决办法

方法一

在要操作的实体类前加上 @Proxy(lazy = false) 关闭懒加载

@Proxy(lazy = false)
public class User{
    ……
}

方法二

在要操作的实体类前加上@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"}),转为 json 的时候忽略 hibernateLazyInitializerhandler

@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
public class User {
    ……
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值