Hibernate JPA约束违规和Transaction已经激活

时间:2014-05-26 17:35:58

标签: java hibernate jpa

我有一张桌子上的字段' nom'使用唯一约束,当我测试插入表中已存在的该字段的值时,抛出 org.hibernate.exception.ConstraintViolationException 。然后在我坚持不懈之后,我得到一个交易已经激活例外。

这是我在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();
    }

如何解决此交易问题?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

没有必要对Transaction做任何事情,因为它是由Spring处理的。

我遇到了#34;交易已经活跃"。虽然我认为导致它的原因与你的问题有所不同,但我认为我的答案应该对某人有帮助。

例如:

// 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;