当前位置: 首页 > 知识库问答 >
问题:

Hibernate JPA约束冲突和事务已处于活动状态

从开济
2023-03-14

我有一个带有唯一约束的字段'nom'的表,当我测试插入表中已经存在的该字段的值时,会抛出org.hibernate.exception.ConstraintViolationExcure。然后在我坚持之后,我得到了一个事务已经活动的异常。

这是我在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个答案

向杜吟
2023-03-14

不需要对事务执行任何操作,因为它是由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;
万俟飞语
2023-03-14

您可以允许框架处理事务,而不是显式打开事务(就像在spring中,您可以使用@transactional)。但如果没有,则代码似乎有一个begin和一个commit(如果成功),请尝试使用finally(或者您甚至可以使用tr.isActive()方法检查事务是否仍然处于活动状态)在persist方法中添加tr.rollback()。

 类似资料:
  • 问题涉及的方法是: 编辑。以下是完整的堆栈跟踪(一些消息是西班牙语的):

  • 我有一个Spring MVC应用程序,它使用Spring Data JPA作为我的JPA提供者来持久化Hibernate。我有一个数据库表,在列上有一个唯一的约束,因此为什么保存相应的实体可能会导致唯一的约束冲突。我想检测这是否发生在我的服务层中,以便我可以向用户呈现有意义的错误消息。以下是我的服务方法。 我的Spring Data JPA存储库看起来像这样: 现在,当发生唯一的约束冲突时,我得到

  • 我见过其他的链接错误,但没有一个能说明如何使用罐子。当我在Jboss中部署我的应用程序时,它可以正常工作,但当我将应用程序部署到websphere时,我遇到了这种链接错误。在这里可以找到一个类似的问题:调用webservice方法时出现LinkageError,但不确定如何修复它 它主要是从和加载的,带有共享类 我所拥有的是jsp调用Web服务。从消息中,我看到的唯一jars来自axis.jar,

  • 我在WebSphereApplicationServer(8.5.5.14)中遇到了LinkageError。这里也发现了类似的问题LinkageError 原因:java。lang.LinkageError:解析方法“javax/xml/soap/SOAPElement.getElementQName()Ljavax/xml/namespace/QName;”时加载约束冲突:loader“com

  • 在表格中列出以下内容: 和 关于插入冲突,目前有: 我如何将unique_position和unique_position_sat_null纳入《关于冲突的约束》 尝试: 和 非常感谢。

  • 问题内容: 我试图在数据库上运行一些更新脚本,但出现以下错误: ALTER TABLE语句与FOREIGN KEY约束“ FK_UPSELL_DT_AMRNO_AFMKTG_REF”冲突。数据库“ ECOMVER”的表“ dbo.AFFILIATE_MKTG_REF”的列“ AMRNO”中发生了冲突。 我正在运行以下脚本: AMRNO是表AFFILIATE_MKTG_REF中的PK。 另外,我尝试