playframework1.2.3无需事务即可将数据保存到数据库中

时间:2013-10-24 03:32:35

标签: jpa playframework flush

我无法在没有交易的情况下将我的实体数据保存到数据库中。 我知道PersistenceContextType.Extend,但我不能成功。


@NoTransaction
public class Application extends Controller {

    public static void create(String body) {
        // EntityTransaction tm = JPA.em().getTransaction();
        if (!JPA.isEnabled()) {
            System.out.println("JPA is not initialized");
        }
        EntityManager manager = JPA.entityManagerFactory.createEntityManager();
        //manager.setFlushMode(FlushModeType.COMMIT);
        manager.setProperty("org.hibernate.readOnly", false);
        //new Customer("001").save();
        if (!JPA.isInsideTransaction()) {
        //  manager.getTransaction().begin();
        }
        createContext(manager, false);
        new Customer("001").save();
        //manager.getTransaction().commit();
        /*
         * if (tm.equals(null)) { System.out.println("success"); }
         */
    }

    static void createContext(EntityManager entityManager, boolean readonly) {
        if (JPA.local.get() != null) {
            try {
                JPA.local.get().entityManager.close();
            } catch (Exception e) {
                // Let's it fail
            }
            JPA.local.remove();
        }
        JPA context = new JPA();
        context.entityManager = entityManager;
        // context.readonly = readonly;
        JPA.local.set(context);
    }
}

我自己草签了JPA以防止游戏开始交易。 我想将我的数据保存到数据库中,但是我收到了TransactionRequiredException错误。 我知道JPA操作需要一个事务,但我想知道是否有异常。

1 个答案:

答案 0 :(得分:0)

我不确定你想要在这里实现什么。最好让Play处理交易。如果没有交易,您将无法提交更改。

如果您需要更多控制提交事务的时间,您可以使用以下实用程序方法:

public static void commit() {
    if (JPA.em().getTransaction().getRollbackOnly()) {
        JPA.em().getTransaction().rollback();
    } else {
        JPA.em().getTransaction().commit();
    }
    JPA.em().getTransaction().begin();
    JPA.em().flush();
    JPA.em().clear();
}