0

我尝试捕获无法保存到数据库的损坏对象的错误。目标是跳过错误并继续合并其他对象。

    for (Dossier dossier : dossiers) {
        try {

           dossierNew =  em.merge(dossier);

        } catch (Exception ex) {

            return dossierNew;
            
        }

}

这是我无法避免的预期错误:

12:51:37,325 调试 [org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认任务 4)无法执行语句 [n/a]:com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException:DB2 SQL 错误: SQLCODE=-407, SQLSTATE=23502, SQLERRMC=TBSPACEID=7, TABLEID=5, COLNO=18, DRIVER=4.24.92 at com.ibm.db2.jcc.am.b6.a(b6.java:806)在 com.ibm.db2.jcc.am.b6.a(b6.java:66) 在 com.ibm.db2.jcc.am.b6.a(b6.java:140) 在 com.ibm.db2.jcc .am.k3.c(k3.java:2817) 在 com.ibm.db2.jcc.am.k3.a(k3.java:2254) 在 com.ibm.db2.jcc.t4.ab.r(ab .java:1631) 在 com.ibm.db2.jcc.t4.ab.l(ab.java:748) 在 com.ibm.db2.jcc.t4.ab.d(ab.java:111) 在 com。 ibm.db2.jcc.t4.pc(p.java:44) 在 com.ibm.db2.jcc.t4.av.j(av.java:162) 在 com.ibm.db2.jcc.am.k3。 an(k3.java:2249) 在 com.ibm.db2.jcc.am.k4.a(k4.java:4609) 在 com.ibm.db2.jcc.am.k4.b(k4.java:4154)在 com.ibm。db2.jcc.am.k4.be(k4.java:821) 在 com.ibm.db2.jcc.am.k4.executeUpdate(k4.java:795) 在 org.jboss.jca.adapters.jdbc.WrappedPreparedStatement。执行更新(WrappedPreparedStatement.java:537)

但在那之后,我的 entityManager 不再用于进一步的操作:

12:51:47,917 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认任务 4)SQL 错误:0,SQLState:空 12:51:47,917 错误 [org.hibernate.engine.jdbc.spi. SqlExceptionHelper](默认任务 4)IJ031070:事务无法继续:STATUS_MARKED_ROLLBACK 12:51:47,920 调试 [org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl](默认任务 4)从 afterTransaction 12:51 启动 JDBC 连接释放: 47,922 DEBUG [org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认任务 4)无法记录警告:java.sql.SQLException:IJ031070:事务无法继续:org.jboss.jca.adapters.jdbc 的 STATUS_MARKED_ROLLBACK。 WrapperDataSource.checkTransactionActive(WrapperDataSource.java:248)

期待建议:-)

4

0 回答 0