【问题标题】:Hibernate constraint violation exception hangs sql server休眠约束违反异常挂起sql server
【发布时间】:2017-03-21 10:20:31
【问题描述】:

我正在尝试将一组记录保存到数据库中,如下所示。我在表的 2 列上设置了唯一约束。我已经处理了约束异常。如果我插入新的记录集,我没有问题。如果我尝试插入重复记录,则会处理异常,但 ms sql server 会说

执行查询。等待数据源的响应。

此外,如果我尝试插入新记录集,则 http 请求未完成并且记录未插入。应该如何处理约束异常,让ms sql server不挂起?

public void addStepFlow(List<StepFlow> stepFlows) {

        Session session = this.sessionFactory.openSession();
        try {
        Transaction tx = session.beginTransaction();
        for (StepFlow stepFlow : stepFlows) {

            session.save(stepFlow);

            session.flush();
            session.clear();
        }
        tx.commit();
        session.close();
        } catch (JDBCException e) {
            SQLException cause = (SQLException) e.getCause();
            System.out.println(cause.getMessage());
        }
    }

【问题讨论】:

  • 为什么不做批量插入而不是一个一个地插入?
  • 刚开始学习。不知道该怎么做。

标签: java spring hibernate orm


【解决方案1】:

尝试回滚异常.. 并且无论发生什么都关闭会话:

    Session session = this.sessionFactory.openSession();
    Transaction tx = null;
    try {
    tx = session.beginTransaction();
    for (StepFlow stepFlow : stepFlows) {

        session.save(stepFlow);

        session.flush();
        session.clear();
    }
    tx.commit();

    } catch (JDBCException e) {
        SQLException cause = (SQLException) e.getCause();
        System.out.println(cause.getMessage());

        tx.rollback();
    }finally{
        session.close();
    }

【讨论】:

  • 是的,必须在尝试块之前定义 tx.. 尝试我的更新
  • 是的,我忘了紧张。做到了
  • 太棒了。很高兴我能帮忙
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2019-12-08
  • 2016-07-02
相关资源
最近更新 更多