JPA之"could not initialize proxy - no Session"的异常解决 2022-07-18 19:58 396阅读 0赞 引言: 在使用JPA中经常会碰到各类问题,这里列出解决no Session问题的方法。 1. 异常信息的描述 这里列出异常栈, 关键词是无法初始化proxy,在读取数据库的过程中. org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:148) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:266) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:68) at com.rain.wx.meal.model.ShopCartOrder_$$_jvst9ff_3.toString(ShopCartOrder_$$_jvst9ff_3.java) at java.lang.String.valueOf(String.java:2982) at java.io.PrintStream.println(PrintStream.java:821) at com.rain.wx.meal.service.OrderServiceTest.testNewShopCartOrder(OrderServiceTest.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 2. 测试代码 这里的测试代码如下: import javax.transaction.Transactional; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import com.rain.wx.meal.dao.ShopCartOrderRepository; import com.rain.wx.meal.model.ShopCartOrder; @RunWith(SpringRunner.class) @SpringBootTest @ActiveProfiles("dev") public class OrderServiceTest { @Autowired private ShopCartOrderRepository shopCartOrderRepo; @Test public void testNewShopCartOrder() { long shopCartOrderId = 5l; ShopCartOrder shopCartOrder = this.shopCartOrderRepo.getOne(shopCartOrderId); System.out.println(shopCartOrder); } } ShopCartRepository的代码: import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.rain.wx.meal.model.ShopCartOrder; @Repository public interface ShopCartOrderRepository extends JpaRepository<ShopCartOrder, Long> { public List<ShopCartOrder> getByUserId(long userId); /** * Query the current shop cart order. * * @param userId * @param dishId * @return */ @Query(value="from ShopCartOrder shopCartOrder where shopCartOrder.userId = :userId and shopCartOrder.mealDish.id = :dishId") public ShopCartOrder getByUserIdAndDishId(@Param("userId") long userId, @Param("dishId") long dishId); } 经过分析,可以发现findOne使用的是JpaRepository自带的方法findOne. 那问题出在哪来呢,因为自带的方法一般不会报错的。 3. 问题的解决 鉴于数据库操作中一般会使用事务,是不是事务造成的呢? 添加@Transactional暂且一试。 import javax.transaction.Transactional; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import com.rain.wx.meal.dao.ShopCartOrderRepository; import com.rain.wx.meal.model.ShopCartOrder; @RunWith(SpringRunner.class) @SpringBootTest @ActiveProfiles("dev") public class OrderServiceTest { @Autowired private ShopCartOrderRepository shopCartOrderRepo; @Test @Transactional public void testNewShopCartOrder() { long shopCartOrderId = 5l; ShopCartOrder shopCartOrder = this.shopCartOrderRepo.getOne(shopCartOrderId); System.out.println(shopCartOrder); } } @Transactional主要在当下的数据库操作中,添加事务控制。 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 could not initialize proxy - no Session 这是一个精典的问题: 因为我们在hibernate里面load一个对象出来时,用到的是代理对象,也就是说当我们在执行load方法时并没有发sql语句,而是返回一个proxy 墨蓝/ 2021年06月24日 22:00/ 0 赞/ 267 阅读
相关 could not initialize proxy - no Session 这是一个精典的问题: 因为我们在hibernate里面load一个对象出来时,用到的是代理对象,也就是说当我们在执行load方法时并没有发sql语句,而是返回一个proxy 亦凉/ 2021年09月26日 05:52/ 0 赞/ 138 阅读
相关 Spring Data JPA 报错 could not initialize proxy – no Session 解决方案 Could not initialize proxy - no Session 在启动项目后报错 [![Spring Data JPA 报错 could not ゝ一纸荒年。/ 2022年02月15日 12:57/ 0 赞/ 99 阅读
相关 hibernate懒加载异常:could not initialize proxy - no Session解决办法 hibernate懒加载异常,通常是在查询一个对象,然后需要获取该对象的关联对象属性时出现的。对于这种错误解决办法有三种: 1、关闭懒加载,lazy=false。这种方式会在 系统管理员/ 2022年03月02日 19:55/ 0 赞/ 355 阅读
相关 在spring data jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session ![异常截图][70] 框架:spring boot 最近使用spring data Jpa时候遇到一个懒加载的问题,下提供出解决方法。 1.在出问题的实体类上加@ 「爱情、让人受尽委屈。」/ 2022年05月16日 15:06/ 0 赞/ 48 阅读
相关 异常Hibernate:could not initialize proxy - no Session 这个从字面上就可以看出:不能初始化,没有session。也就说主要原因是因为session关闭了。 在[hibernate][]中,<many-to-one…/>中的l 谁借莪1个温暖的怀抱¢/ 2022年07月11日 16:18/ 0 赞/ 86 阅读
相关 JPA中的could not initialize proxy - no Session异常分析与解决 引言: JPA是一种非常流行和常用的持久化框架标准,其下可以对接若干种不同的实现,在不同的父子表管理中,经常会碰到no Session的问题,该如何解决呢? 1. 问题的引出 r囧r小猫/ 2022年07月15日 21:40/ 0 赞/ 22 阅读
相关 JPA之"could not initialize proxy - no Session"的异常解决 引言: 在使用JPA中经常会碰到各类问题,这里列出解决no Session问题的方法。 1. 异常信息的描述 这里列出异常栈, 关键词是无法初始化proxy,在读取 女爷i/ 2022年07月18日 19:58/ 0 赞/ 397 阅读
相关 could not initialize proxy - no Session 这是一个精典的问题: 因为我们在hibernate里面load一个对象出来时,用到的是代理对象,也就是说当我们在执行load方法时并没有发sql语句,而是返回一个pro 我会带着你远行/ 2022年08月01日 21:40/ 0 赞/ 34 阅读
相关 JPA报could not initialize proxy异常 Q: 问题描述:查考试表的时候 用org.springframework.data.repository.CrudRepository\findById 正常。 用org.s 比眉伴天荒/ 2022年11月21日 09:06/ 0 赞/ 130 阅读
还没有评论,来说两句吧...