[英]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.