【问题标题】:No transaction is currently active当前没有交易处于活动状态
【发布时间】:2013-12-04 12:15:45
【问题描述】:

所以我这里有这段代码

User us = new User();
            us.setId(id1);
            us.setUsername(userNameTextField.getText());
            us.setPassowrd(passwordFormattedTextField.getText());
            us.setLevel(levelComboBox.getSelectedItem().toString());
            us.setEmpid(getCurrentEmp());
            getCurrentEmp().getUserCollection().add(us);
            em.getTransaction().begin();               
            em.persist(getCurrentEmp());
            em.flush();
            em.getTransaction().commit();

但是当我尝试提交时,我得到了这个错误

Exception Description: No transaction is currently active
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionWrapper.throwCheckTransactionFailedException(EntityTransactionWrapper.java:87)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionWrapper.checkForTransaction(EntityTransactionWrapper.java:50)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.checkForTransaction(EntityManagerImpl.java:2015)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:846)

我没有得到 y,因为我已经按如下方式调用了 entitymanager 实例

em = emi.getInstance();

来自这个班级

public class EmInstance {
EntityManager em;
public EntityManager getInstance(){
em = Persistence.createEntityManagerFactory("samplePU").createEntityManager();
return em;
} 

}

我的问题是,当我想使用它时如何使事务处于活动状态,例如在提交、更新或任何其他事务过程时。我正在使用 eclipselink 及其桌面应用程序

【问题讨论】:

  • 您使用的是哪个版本的 eclipselink,如果您还没有,可以尝试最新的版本吗?
  • 异常是由刷新引起的,可能是持久化提供程序触发的隐式刷新;您可能想尝试将 getTransaction().begin() 移到方法的开头,以确保事务在可能涉及 JPA 的任何地方都处于活动状态。
  • 如果您使用的是容器管理事务,那么 spring 的 @Transactional 注释将在您的方法中工作。如果您使用的是 REOURCE_LOCAL 类型,那么您需要以编程方式开始并提交事务。

标签: java jpa eclipselink desktop-application


【解决方案1】:

您确定这两次调用em.getTransaction() 会返回相同的交易吗? 尝试:

EntityTransaction etx = em.getTransaction();
etx.begin();
...
etx.commit();

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多