Java 何时使用@Transactional';s传播=Proagation.REQUIRES_NEW?

Java 何时使用@Transactional';s传播=Proagation.REQUIRES_NEW?,java,hibernate,spring,jakarta-ee,Java,Hibernate,Spring,Jakarta Ee,我的问题很简单,几乎已经在标题中说明过了:是否有一种特定的模式/用例可以说应该使用@Transactional(propagation=Proagation.REQUIRES_NEW)而不是默认的传播 谢谢 编写审计跟踪。您希望记录某人尝试做某事的事实,而不管主事务是否成功(因此被回滚)。特定用途包括您需要在方法中执行某些工作,并在继续现有事务之前提交这些工作的场景 例如,方法调用的“审计”(而不是日志记录)是一种场景,在这种场景中,无论现有业务事务最终是提交还是回滚,您都希望提交审计条目 另一

我的问题很简单,几乎已经在标题中说明过了:是否有一种特定的模式/用例可以说应该使用@Transactional(propagation=Proagation.REQUIRES_NEW)而不是默认的传播


谢谢

编写审计跟踪。您希望记录某人尝试做某事的事实,而不管主事务是否成功(因此被回滚)。

特定用途包括您需要在方法中执行某些工作,并在继续现有事务之前提交这些工作的场景

例如,方法调用的“审计”(而不是日志记录)是一种场景,在这种场景中,无论现有业务事务最终是提交还是回滚,您都希望提交审计条目


另一种情况是,您有多个业务事务正在从一个facade调用,每个这样的调用都必须在将控制权返回到facade之前提交它的工作。这种情况非常罕见,但您可能会在创建自己事务的工作流系统中发现这种情况(其中条目记录在工作流的进度上),对驻留在同一应用程序中的其他组件的调用必须在单独的事务中发生。

这意味着内部事务始终被执行,即使外面的人不是?埃里克,是的。顺便说一下,JTA(在后台使用)没有内部事务的概念。现有事务被挂起,新事务被启动。在新事务终止(提交或回滚)时,将恢复现有事务。是的,它们是不同的,存在“嵌套”事务的整个其他概念,其中嵌套事务依赖于外部事务。EJB不支持嵌套事务。