当前位置: 首页 > 知识库问答 >
问题:

未按预期提交实体(HiberNate ORM with Panache)

臧友樵
2023-03-14

在流程执行过程中,我打开了两个事务:

  • 一个是创建一个对象并通知流程已经开始

但是,在执行第二个事务方法之后,如果我查询数据库该值还没有更新,我所期望的是,在执行带有@transactional注释的方法完成之后,对象已经被提交到数据库中。

本项目再现了这种情况:https://github.com/emersonl91/quarkus-test

重要提示:https://github.com/emersonl91/quarkus-tests/blob/master/code-with-quarkus/src/main/java/org/acme/MyService.java#L32

https://github.com/emersonl91/quarkus-tests/blob/master/code-with-quarkus/src/test/java/org/acme/ExampleResourceTest.java#L37

编辑1:我测试了UserTransaction和TransactionManager类,但同样的问题也出现了。

编辑2:在transactionTest方法中,我添加了@transactional(不受支持)注释,在persist和update方法中,我添加了@transactional(REQUIRES_NEW)注释。结果没有改变。

共有2个答案

印子平
2023-03-14

默认的事务传播级别是必需的。因此,如果一个方法(用@Transactional注释)调用另一个方法(用@Transactional注释),第二个方法将使用第一个方法的现有事务,而不会创建新的事务。为了强制第二个方法执行新事务,您需要将第二个方法的传播级别更改为REQUIRES_NEW。也就是说,我从未找到过这样的用例。

看见https://www.baeldung.com/spring-transactional-propagation-isolation

池赞
2023-03-14

如果将@Transactional移动到transactionTest()方法会发生什么?

 类似资料:
  • 我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它

  • 当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。

  • 我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括:

  • 我正在和selenium一起工作,刮一些数据。 有一个按钮在页面上,我正在点击说“Custom_Cols”。这个按钮为我打开了一个窗口,我可以在那里选择我的列。 我的问题是为什么新窗口上的元素不可见,即使我正在等待元素的可见。补充一下,我已经尝试增加延迟时间,但我还是会偶尔出现这个错误。 我的密码在这里

  • 一些背景知识,我在我的web应用程序中使用JPA/Hibernate/Spring,我也使用org。springframework。orm。jpa。支持OpenEntityManagerViewFilter和用于处理实体的扩展持久性上下文。 问题: > 使用find方法从数据库加载实体,实体存储在会话中 用户更改实体并点击保存 用户更改反映在会话中存储的实体上(在控制器中) 实体被发送到服务类中的