java - JPA Toplink - 在流程开始时检查 Activity 事务的需要是什么?

标签 java jpa transactions entitymanager toplink-essentials

我在 Internet 上看到很少有示例在流程开始时检查事务当前是否处于 Activity 状态。

下面是我从工厂获取 EntityManager 的代码。

我不明白为什么需要在交易开始之前检查交易是否活跃???

是否因为其他一些进程可能正在使用相同的 EntityManager 实例? (EntityManagerFactory 是单例但 EntityManager 不是)

    @Path("update")
    @PUT
    @Consumes("application/json")
    public Response machineUpdate(String content) {
        JSONObject jObj = null;
        EntityManager em = null;
        EntityTransaction txn = null;

        try {

           JSONObject jObj = new JSONObject(content);
           em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();

           //what's this line doing here???
           if(em.getTransaction().isActive()) {
               return HttpStatusHandler.sendConflict();
           }

           txn = em.getTransaction();
           txn.begin();
          //more process ......
        }
        catch(.....

最佳答案

鉴于代码使用的是 JPA 事务 API,我看不出有任何理由进行事务检查,鉴于 EntityManager 刚刚创建,事务无法激活。

如果您使用的是 JTA 管理的 EntityManager,那么 JTA 事务可能已经处于 Activity 状态。但是对于 JTA,您不能使用 JPA Transaction 开始事务,您可以使用 JTA 开始事务,或者在 JPA 中使用 joinTransaction()。

关于java - JPA Toplink - 在流程开始时检查 Activity 事务的需要是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991717/

相关文章:

java - 使用 Ebean 在 Play Framework 2.3.3 中映射 @ManyToOne 关系的异常

mysql - SQL 到 JPQL 的左连接为空

java - JBoss AS 7.1 中 MySQL 数据库的事务错误

java - 表示 Enum 的列使用哪种数据类型?

java - 需要引用Ontology的一个工作示例

Java解析url错误

java - java 文件中出现意外的日志 json

java - 使用 BasicDataSource 的 MYSQL 事务

mysql - 同时选择和更新

java - 使用java获取OData中entitySet中的条目数