【问题标题】:Transactional wrapped method dont persist or remove事务性包装方法不保留或删除
【发布时间】:2018-05-01 12:07:13
【问题描述】:

嗨,我遇到了一个名为 Bean 的 CDI 问题,它是 @Transactional。

我使用的是 WildFly 11.1.0.Final。

这里是代码:https://gist.github.com/stefanwendelmann/7a1f8352900067d5a59826d6ee205044

这是persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="QuoLoco" transaction-type="JTA">
    <description>Verbindung zur QuoLoco Datenbank</description>
    <jta-data-source>java:/QUOLOCO_NORM</jta-data-source>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <properties>
      <property name="hibernate.format_sql" value="false"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
      <property name="hibernate.id.new_generator_mappings" value="false"/>
    </properties>
  </persistence-unit>
</persistence>

当我调用方法“doChange”并且只编辑 Empfangseinheittypen 参数时,em.remove 和 em.persist 不会触发刷新。

当我调用方法“doChange”并编辑一些主要的  Empfangseinheittypen empfangseinheittyp 时,我发现 Empfangseinheittypen 参数不需要刷新

做错了什么?

这两种方法都是公开的。

请看附件的应用图片

提前感谢您的帮助

【问题讨论】:

  • 如果这还相关。我用 CDI-Transactional 做了一些测试。与 EJB 没有显着差异。因此有几个问题:您是如何发现更改没有被刷新的?您使用的是什么 DBMS?你是在子类中还是从另一个 bean 中调用 doChange?
  • 嗨@aschoerk,我们使用 SQL Server 2008 R2。调用来自 xhtml JSF 前端。现在我们改为使用 BMT 来配合我们的应用程序。
  • 啊 SqlServer 2008,所以没有 MVCC。但是:您是如何发现更改没有被刷新的?你是在子类中还是从另一个 bean 中调用 doChange?
  • 没有从同一个 bean 调用 doChange。当我们编辑一些主要信息(Empfangseinheittypen)时,它(empfangseinheittypenparameter)被刷新
  • “从同一个 bean 调用”通常意味着事务拦截器不工作。你确定是这样吗?

标签: java jakarta-ee transactions cdi java-ee-7


【解决方案1】:

根据 cmets,doChange 是从同一个 bean 调用的。 问题类似于@Transactional method called from another method doesn't obtain a transaction,这意味着事务不会以 doChange 结束,因此您不能期望从方法返回时完成刷新。

【讨论】:

  • 我尝试用 @Transactional(TxType.REQUIRES_NEW) 注释方法,但效果相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2020-01-28
  • 2019-05-18
相关资源
最近更新 更多