SpringBoot集成JPA,单元测试方法报错:could not initialize proxy - no Session

第一次使用JPA,感觉就是代码简洁。只要接口继承JpaRepository 就能调用默认的方法。如:

public interface UserRepository extends JpaRepository<User,Integer> {
	
    User findByUsername(String username);
}

于是乎,单元测试下 父类的方法:

/**
  * JPA方式獲取用戶列表
  * @return
*/
public List<User> getUserList(){
    return userRepository.findAll();
}
@Test
public void getUserListByJpaTest(){
    List<User> list = userServiceImpl.getUserList();
    Assert.assertEquals(6, list.size());
}

OK测试通过,快马加鞭下一个:

/**
  * JPA方式獲取單個用戶
  * @param id
  * @return
*/
public User getUserById(int id){
    return userRepository.getOne(id);
}
@Test
public void getUserByIdByJpaTest(){
    User user = userServiceImpl.getUserById(1);
    Assert.assertEquals("admin", user.getUsername());
}

天有不测风云,竟然爆红了~~,异常:

org.hibernate.LazyInitializationException: could not initialize proxy [com.example.demo.domain.User#1] - no Session
	at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:155)
	at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:268)
	at ...

大概的意思就是说,单元在进行数据库访问的时候,针对数据库的访问与操作session已经释放了。

解决:在测试方法上面加@Transactional,即添加事务控制注解,保证了该操作过程是一个会话过程

感谢:https://blog.youkuaiyun.com/zlt995768025/article/details/79603479

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值