java - JPA和JTA模式下的事务(开始和提交)

标签 java hibernate jpa transactions jta

我用JPA练习过JTARESOURCE_LOCAL模式,这两种模式之间有很大的区别。

当我使用RESOURCE_LOCAL时,我必须使用EntityTransaction自己管理事务,而当我使用JTA时,它是由应用程序服务器隐式完成的。

所以我想知道begin()commit()方法在JTA模式下何时执行。

我假设当应用程序服务器收到 HTTP 请求时,它会执行“begin()”,并且在向客户端发送 HTTP 响应之前,它会执行“commit()” ”;另外,如果在发送响应之前发生错误,它会执行“rollback()”。我说得对吗?

最佳答案

JPA 规范没有定义使用 JTA 事务时触发 begincommit 的确切位置。

事务控制与 HTTP 请求/响应无关,也不会被它们触发。

将为所有事务方法(默认为所有 EJB 方法)提供 JTA 事务,无论其用途如何。

但是考虑到 JTA 事务和 JPA,有一些保证。事务保证在第一次调用 EntityManager 时启动,并保证在方法返回之前提交或回滚。

关于java - JPA和JTA模式下的事务(开始和提交),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974191/

相关文章:

java - hibernate 异常 : Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

java - 在 JavaMoney (JSR 354) 中创建 ExchangeRateProvider 的推荐方法是什么?

java - 默认 ResourceBundleMessageSource 有什么意义?

java - 重构java中的if语句

java - (Entity-Control-Boundary pattern) -> 如何处理两个实体?

java - 有没有办法根据参数值使 MySQL 查询行为不同?

java - JPA:防止单向一对多映射中的级联更新

java - 有没有办法查看 L2 hibernate 缓存?

jsf - JSF 应用程序的审计跟踪 - 全局 valueChangeListener 可能吗?

java - Spring Boot 中 Repository 默认 "findById"函数的运行时是多少?