當我單獨運行我的單元測試時,它們可以正常工作。 (省略斷言)JPA錯誤:事務處理當前處於活動狀態
@Test
public void testSave()
{
EntityManagerHelper emh = new EntityManagerHelper();
LevelDAO dao = new LevelDAO();
Level l = new Level();
l.setName("aname");
emh.beginTransaction();
dao.save(l);
emh.commit();
}
然後運行下面沒有問題
@Test
public void testUpdate()
{
EntityManagerHelper emh = new EntityManagerHelper();
LevelDAO dao = new LevelDAO();
Level l = new Level();
l.setName("bname");
l.setLevelid(1);
emh.beginTransaction();
dao.update(l);
emh.commit();
}
這單個測試當他們在同一時間順序運行我收到的錯誤 - 事務是當前活動。有沒有辦法讓每個單元測試只在前一件工作的事務處於非活動狀態後才能運行?我應該看看Spring嗎?
更新
的EntityManagerHelper能夠訪問到持久化上下文,像這樣
emf = Persistence.createEntityManagerFactory("bw_beta");
threadLocal = new ThreadLocal<EntityManager>();
它看起來像問題
所以哈克的解決方法是使用本地即定義。
EntityManagerFactory factory = Persistence.createEntityManagerFactory("bw_beta");
EntityManager entityManager = factory.createEntityManager();
entityManager.getTransaction().begin();
dao.save(l);
entityManager.persist(l);
entityManager.getTransaction().commit();
很確定有更好的方法 - 也許使用Spring?
'EntityManagerHelper'內發生了什麼? – axtavt
@DataNucleus:他沒有說他想要並行運行它們。 –
什麼是異常的堆棧跟蹤? –