JAVA Spring与事务, 三种时态(游离/托管/持久), 懒加载的关系?
展开全部
游离不用说,你自己新建对象就是游离态。
持久态,如果你的事务是放在Service层,那么在Service层及以下的方法里,从Session中获取的对象,或者save persis update等的对象就是持久态。
托管态,如果你的Service层方法返回一个PO对象,这个对象返回之后肯定是托管态。
如果你的Service层方法接受一个游离态PO对象,然后被save了,Servcie层方法返回后,这个游离态PO对象,肯定也是托管态。
懒加载异常:
如果你在Action层或者View层对托管态对象调用get方法试图获取懒加载的数据,肯定报异常。
原因是事务边界就在Service层方法处结束,Session也会在Service方法退出后关闭。
而如果使用OpenSessionInViewFilter,则Session的关闭时机会延迟到View层,其实就是JSP代码运行完毕之后才关闭。这样的话就不会报懒加载异常了。
持久态,如果你的事务是放在Service层,那么在Service层及以下的方法里,从Session中获取的对象,或者save persis update等的对象就是持久态。
托管态,如果你的Service层方法返回一个PO对象,这个对象返回之后肯定是托管态。
如果你的Service层方法接受一个游离态PO对象,然后被save了,Servcie层方法返回后,这个游离态PO对象,肯定也是托管态。
懒加载异常:
如果你在Action层或者View层对托管态对象调用get方法试图获取懒加载的数据,肯定报异常。
原因是事务边界就在Service层方法处结束,Session也会在Service方法退出后关闭。
而如果使用OpenSessionInViewFilter,则Session的关闭时机会延迟到View层,其实就是JSP代码运行完毕之后才关闭。这样的话就不会报懒加载异常了。
追问
你好解释的再通俗点, 我是初学的,
另外能不能解释下spring不是自动管理事务吗? 为什么需要定义传播行为和隔离级别, 貌似是AOP?
追答
想要理解如何自动管理事务,得先明白如何手动使用事务。
先学数据库,什么是数据库事务。
学Hibernate,Hibernate手动事务如何使用。
学Spring,Spring的事务管理是如何实现的。
学JSP+Servlet。
学J2EE的多层结构。
学SSH整合。
学如何在SSH中,使用手动事务。(编程式事务)
学如何在SSH中,使用自动事务。(声明式事务)
一个回答不可能给你回答清楚的,看看这本书吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询