0
我在jboss 5.1.0.GA中遇到了一個奇怪的JTA情況。我有一個服務類,有兩種方法removeEntity()
和findEntityByField()
- 名稱反映的行動。JTA在jboss 5和持續競賽中
當我打電話removeEntity()
,然後立即運行findEntityByField()
與字段參數匹配刪除的實體 - 它仍然在數據庫中找到。這隻發生在removeEntity()
使用EntityManager.remove()
,如果我使用刪除(命名)查詢,而不是按預期工作(?!)。
看着數據庫,它被刪除,無論我使用了哪個實現。的 「有問題」 removeEntity()
實現:
public void removeEntity(long id) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
MyEntity myEntity = entityManager.find(MyEntity.class, id);
entityManager.remove(myEntity);
entityManager.close();
}
工作removeEntity()
的執行情況:
findEntityByField()
@NamedQuery(name = "deleteById", query = "delete MyEntity where id = :id")
public void removeEntity(long id) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createNamedQuery("deleteById");
query.setParameter("id", id);
query.executeUpdate();
entityManager.close();
}
:
@NamedQuery(name = "findByField", query = "from MyEntity where field = :field"),
public MyEntity findEntityByField(String field) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createNamedQuery("findByField");
query.setParameter("field", field);
MyEntity myEntity = query.getSingleResult();
entityManager.close();
return myEntity;
}
可以值得一提的是我有一個這個場景的單元測試不會失敗。但這與JTA案例不同,因爲它是transaction-type="RESOURCE_LOCAL"
交易是手動/明確提交的。
我可以接受使用命名查詢刪除entites,但我真的很想明白爲什麼會發生這種情況。
這是我(JPA)單元測試做什麼,而我想這會的工作,我不知道這是最好的工作方式是什麼?我的希望是將容器交給容器,使它在緩存和提交數據方面變得更有效率。 –
(並且,即使它工作,我主要關心的是理解爲什麼.remove()不起作用) –