2013-10-24 55 views
-1

我無法將我的實體數據保存到數據庫中而沒有發生事務。 我知道PersistenceContextType.Extend,但我不能成功。 請給我一些幫助。playframework1.2.3將數據保存到數據庫中而不發生任何事務


@NoTransaction 公共類應用擴展控制器{

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由我自己來防止遊戲從開始trasaction。 我想將我的數據保存到數據庫中,但我得到一個TransactionRequiredException錯誤。 我知道JPA操作需要一個trasaction,但我想知道是否有例外。

+0

請提供代碼樣本和背景。 – emt14

+0

Play將爲您管理交易。每個Controller方法將在離開該方法後輸入並提交時啓動事務。 – evandongen

回答

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(); 
} 
相關問題