【问题标题】:Hibernate JPA constraint violation and Transaction already activeHibernate JPA 约束违反和事务已经激活
【发布时间】:2014-05-26 17:35:58
【问题描述】:

我有一个带有唯一约束的字段“nom”的表,当我测试插入表中已经存在的该字段的值时,org.hibernate.exception.ConstraintViolationException 是抛出。然后,在我坚持不懈之后,我得到了一个 Transaction already active 异常。

这是我在 Dao 类中的持久化方法

public void persist(E entity) throws Exception {
EntityTransaction tr=entityManager.getTransaction() ;
tr.begin();
entityManager.persist(entity);
tr.commit();
 }

这里是我捕获异常的代码

try {

        rd.persist(r);

    } catch (Exception e) {
        e.printStackTrace();
    }

我该如何解决这个交易问题?

【问题讨论】:

  • 避免使用程序化事务。请改用声明性事务。
  • 我应该把@transactional注解放在哪里?
  • @Transactional 注释可以放置在您的服务类上,也可以根据要求用于覆盖类级别注释的方法级别。
  • 你有什么问题?
  • @macias 你可以看到编辑

标签: java hibernate jpa


【解决方案1】:

您可以允许框架处理事务,而不是显式打开事务(就像在 spring 中一样,您可以使用@transactional)。但如果不是,它看起来像代码有一个开始和一个提交,以防它成功,尝试使用 finally 方法在持久化方法中添加一个 tr.rollback() (或者你甚至可以使用 tr 检查事务是否仍然处于活动状态.isActive() 方法。

【讨论】:

  • 错误是由什么引起的?交易没有完成吗?
  • 是的,如果发生错误,会跳过 tr.commit(),因此如果将 tr.rollback() 放入 catch 块中,它可能会解决错误。
  • try { if(!tr.isActive()) tr.begin(); entityManager.persist(entity); tr.commit(); } catch (Exception e) { tr.rollback(); }
  • ganaraj,@mecias 这个代码非常好,但是还有其他方法吗,因为我认为这不是最好的方法 ;)
  • 如果你愿意,你也可以提交而不是回滚。您可以尝试的另一种选择是检查事务是否在持久方法之外的 catch 块中处于活动状态。尝试 { rd.persist(r); } 捕捉(异常 e){ e.printStackTrace(); EntityTransaction tr=entityManager.getTransaction() ; if(tr.isActive()) ( //这里要么提交要么回滚)}
【解决方案2】:

Transaction 不需要做任何事情,因为它是由 Spring 处理的。

我遇到了“交易已激活”。虽然我认为导致它的原因与您的问题不同,但我认为我的回答应该对某人有所帮助。

例如:

// Transaction handled by Spring
Session session = sessionFactory.getCurrentSession();
...
return;

------------------------------------------------------------

// Transaction handled by yourself
Session session = sessionFactory.openSession();
Transcation tr = session.beginTransaction();
...
tr.commit();
session.close();
return;

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多