我可以拨打entityManager.merge(obj)
,但不能拨打entityManager.flush()
。
我收到“没有正在进行的交易”。
我的申请背景有:
<jee:jndi-lookup jndi-name="${persistenceEMFJndiServerName}"
id="entityManagerFactory" expected-type="javax.persistence.EntityManagerFactory" />
<bean id="entityManager"
class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" >
</bean>
我的持久性单位表示transaction-type =“JTA”
我正在通过
加载它@PersistenceContext
private EntityManager entityManager;
我尝试了一些事情,比如:
entityManager.joinTransaction()
,
entityManager.getTransaction().begin()/.end()
,
@Resource UserTransaction
进行BEAN
事务管理,但它说我不能使用JTA。没有交易正在进行中。
我的方法有
@Transactional
@TransactionAttribute(TransactionAttributeType.REQUIRED)
它是一个EJB,所以我很生气。 CMT JTA应该单独进行交易。
答案 0 :(得分:0)
原来它不是JPA / JBoss /等。问题。这是因为我的线程在驼峰环境中运行。
我花了一天时间搜索find out:
重要 :一个事务与单个执行线程相关联! - 如果您在子路径中使用“seda”,“vm”,“jms”或任何其他协议来处理不同线程中的交换,则此执行将不属于此事务上下文!
供参考: &#34; Camel 3.0.0&#34;
中的异步事务我在一个线程中有了我的entityManager.merge / flush代码。因此,没有交易。摆脱线程,现在它工作正常。