gpt4 book ai didi

java - JPA异常处理

转载 作者:行者123 更新时间:2023-12-02 04:51:04 25 4
gpt4 key购买 nike

我正在运行某个进程,该进程通过 for 循环在数据库中插入新元素。我正在使用JPA(Eclipselink),有时交易状态会出现问题。情况是这样的:

  1. 其中一个插入不起作用(主键重复)
  2. 此后,所有插入都会失败(异常描述:事务当前处于 Activity 状态)。
<小时/>
 for (Element l:e){
try{
//Should I add: if(!em.getTransaction().isActive())
em.getTransaction().begin();
em.createNativeQuery("INSERT INTO...").executeUpdate();
em.getTransaction().commit();
}
catch(Exception ep)
{
//right now I don't do anything here
}
}

我知道发生的事情是,由于 1) 中的提交不起作用,事务没有完成,因此下一个 em.getTransaction().begin() 将找到一个已经处于 Activity 状态的事务。

我有两个想法:

A) 在 em.getTransaction().begin() 之前,检查交易是否处于 Activity 状态,如果不是,则调用 begin();否则,创建查询并提交。

B) 在 catch block 内执行某些操作。这是我的疑问......我应该调用clear()吗?冲洗()?关闭()?

哪个更好看?谢谢!

最佳答案

ElementManager.Query 引发的异常不会回滚 Activity 事务。我在这里看到两个选项:

  1. 使用 em.getTransaction().rollback() 在 catch 子句中自行回滚事务。
  2. 不要使用查询插入数据,而是使用基于 EntityManager.persist首选方式,其异常会导致自动回滚(在您的特定情况下,这将导致 javax.persistence.EntityExistsException)。

关于java - JPA异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29236832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com