[英]JPA EntityManager not removing entities
我想從數據庫中刪除實體列表。 List<LetterEntity> letterToDel
- 實體列表。 我試圖以多種方式刪除此列表。
EntityTransaction trx = em.getTransaction();
try {
for (LetterEntity l : lettersToDel) {
trx.begin();
em.remove(l);
em.flush();
trx.commit();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (trx.isActive())
trx.rollback();
}
try {
for (LetterEntity l : lettersToDel) {
EntityTransaction trx = em.getTransaction();
trx.begin();
em.remove(l);
em.flush();
trx.commit();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (trx.isActive())
trx.rollback();
}
在案例1,2中沒有例外,但實體沒有刪除。
try {
for (LetterEntity l : lettersToDel) {
em.createQuery("delete from LetterEntity l where l = :letter")
.setParameter("letter", l)
.executeUpdate();
}
} catch (Exception e) {
e.printStackTrace();
}
在案例3中有一個例外:
javax.persistence.TransactionRequiredException: Executing an update/delete query
我做錯了什么?
代碼應該在執行查詢之前創建事務。
try {
EntityTransaction trx = em.getTransaction();
trx.begin();
for (LetterEntity l : lettersToDel) {
em.createQuery("delete from LetterEntity l where l = :letter")
.setParameter("letter", l)
.executeUpdate();
trx.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
對於案例3,這是正常的。 您需要一個事務來執行更新。 (如果使用Spring,只需在方法中添加@Transactional注釋)
對於1和2,你進入trx.rollback(); 在你的最后陳述?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.