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

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纳入《关于冲突的约束》 尝试: 和 非常感谢。

  • 我有一个用户创建屏幕,它记录了各种用户详细信息以及名字和手机号码。我有一个对应的用户表,其中名字和手机号码构成一个复合唯一键。此表中还定义了其他完整性约束。 当在创建用户屏幕上输入违反此约束的用户数据时,需要向用户显示“用户友好”错误消息。 当这种违反发生时,我从MySQL数据库中得到的异常是: 有两个选项可以显示有意义的消息(例如:“错误:给定手机号码的用户名已存在,请更改其中一个”)。 选项1