@Component
public class Bean1{
@Autowired
Bean2 bean2;
@Transactional(propagation = Propagation.REQUIRED)
public void foo()
{
bean2.bar();
}
@Component
public class Bean2{
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void bar()
{
try{
// Do something which throws exception
}
catch (Exception e) {
log & eat the exception here only.
But inspite of this the outer transaciton gets rolled back
}
}
D| o.s.o.h.HibernateTransactionManager- Creating new transaction with name ... PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
这意味着没有为内部bean2.bar()创建新事务;
我找不出这里出了什么问题?非常感谢任何帮助。
REQUIRES_NEW仅适用于JTA事务管理器。请参阅此处的Spring Doc
REQUIRES_NEW公共静态最终传播REQUIRES_NEW
以非事务性方式执行,如果存在当前事务,则挂起当前事务。类似于同名的EJB事务属性。
注意:实际的事务挂起不会在所有事务管理器上的开箱即用。这特别适用于JtaTransactionManager,它要求javax.transaction.TransactionManager对它可用(这在标准J2EE中是特定于服务器的)。
在以下代码方法中,更新正确的sql,但sql有一些问题,但是,当我调用doService()时,它必须将更新提交到DB,即使doService 2()有sql异常,因为doService 2()有一个新的传播类型,但是当我取消这个更新时,不会提交DB。。 正如你们的建议,以以下方式进行测试,但仍然面临相同的问题。这里i在一个单独的类中,但即使仍然存在与上述相同的问题
我有一个事务服务调用第二个具有REQUIRES_NEW传播的服务。 激活日志我看到Spring在创建子事务时创建了一个新的Hibernate会话,即使当前线程已经有一个打开的会话。 重用会话难道不是更好的性能明智之举吗?这还可以避免在子事务中重新加载或重新附加对象。我在这里错过了什么? 此行为硬编码在org . spring framework . ORM . hibernate 3 . hibe
下面是我的dispatcher-servlet.xml文件: http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context/spring-context
我正在尝试代码优先的方法来使用Spring、Boot和Hibernate创建数据库。 但是,我现在还做不到。 这是我的控制器
代码: 此控制器调用一个服务: 这个service1调用一个service2,因为我知道Spring Boot AOP是基于代理的,所以我需要另一个bean来切换事务的传播:
问题内容: 我正在使用,并且正在尝试运行一个简单的应用程序,尤其是运行在page中描述的应用程序。我的hibernate.cfg.xml文件是: 我(使用maven时)是: 我在链接中使用它: 但是,不可能获得应用程序的工作,即在数据库中hibernate创建表并插入值。无论尝试如何,我总是会收到相同的错误: 在线上的“关系部门不存在”: 我也没有完全相同的错误尝试过。为了抢占某些读者,请不要在数