【发布时间】:2013-12-03 14:09:50
【问题描述】:
我刚刚看到了两个不同的项目。
当您尝试从没有@Transactional 注释的方法中持久化/保存实体时,其中之一会出现异常:No session found
另一方面
即使不存在@Transactional 注释,save 方法也允许保存。
PS - 一个项目使用 Spring + Hibernate(session not found 例外),另一个使用 Spring + JPA + Spring Data 存储库(允许在没有事务注释的情况下保存)
任何想法为什么会出现差异?最佳做法是什么?
【问题讨论】:
-
您确定在第二个项目的调用堆栈中某处没有
@Transactional方法吗?它是被方法调用包裹的通知,因此如果仅从具有通知的其他方法调用持久性方法,则它本身不必具有注释。 -
很确定,仔细检查一下
-
你检查过课堂上是否有@Transactinal注解吗?如果一个类被注释为事务性的,这会影响该类的所有方法。
-
或者通过 AOP 进行交易?
-
也许在 JPA 项目中,事务是在 spring 上下文中声明的。在上下文中搜索 txManager(例如 JpaTransactionManager)并跟踪它的使用情况...
标签: java spring hibernate jpa transactional