违反了Mybatis Spring事务式多删除约束

neo6200

我正在使用Spring 3和Mybatis 3。

只是在我要进行级联删除时,一切正常。

Ive有2个表,中间是MM关系表。像Table1 ---> MiddleTable ---> Table2之类的东西

我想从Midle表中删除,然后删除Table2中相关的数据。

在使用事务性方法时

@Transactional
public void relacionaReservaLibreBonoLibre(ParametrosRelacionReservaBono params) throws Exception{
    ReservaBean r=rm.buscarReservaPorPK(params.getReserva());


    for(BonoJson b:params.getListaBonosAdd()){
        HotelBean h=hm.buscaHotelPorCodHotel(b.getHotel());
        EstacionBean e=em.buscaEstacionPorEstacionYHotel(b.getEstacion(),h.getCnHotel());

        DocumentoBean db=new DocumentoBean();
        db.setCnEstacion(e.getCnEstacion());
        db.setCnHotel(h.getCnHotel());
        db.setCnTipDoc(r.getCnTipoDoc());
        db.setFlLibre(true);
        db.setTeDoc(b.getCodBono());
        Integer docId=dm.insertaDocumento(db);

        DocumentoReservaBean drb=new DocumentoReservaBean();
        drb.setCnDoc(docId);
        drb.setCnReserva(r.getCnReserva());

        drm.insertaDocumentoReserva(drb);
    }

    for(BonoJson b:params.getListaBonosQuit()){
        HotelBean h=hm.buscaHotelPorCodHotel(b.getHotel());
        EstacionBean e=em.buscaEstacionPorEstacionYHotel(b.getEstacion(),h.getCnHotel());


        ReservaDocumentoReservaBean filtro=new ReservaDocumentoReservaBean();
        filtro.setTeDoc(b.getCodBono());
        filtro.setCnReserva(r.getCnReserva());
        filtro.setFlLibre(true);
        List<ReservaDocumentoReservaBean> resPrev=rdm.getReservaDocumentos(filtro);

        for(ReservaDocumentoReservaBean resPart:resPrev){


            DocumentoReservaBean drb=new DocumentoReservaBean();
            drb.setCnDocReserva(resPart.getCnDocReserva());
            drm.eliminaDocumentoReservaPorPK(drb);

            DocumentoBean db=new DocumentoBean();
            db.setCnDoc(resPart.getCnDoc());
            dm.eliminaDocumentoPorPK(db);
        }
    }

}

当执行de时,它的效果很好

dm.eliminaDocumentoPorPK(db);

它启动Constraint违规表2到中间表,该表应该在其中删除

drm.eliminaDocumentoReservaPorPK(drb);

¿任何提示吗?

提前致谢。

罗曼·科诺瓦尔(Roman Konoval)

有几种选择:

  1. 从Table2中删除,然后从MiddleTable中删除
  2. 如果可以接受(即MiddleTable实体拥有Table2实体),则更改数据库中的外键,以便在删除MiddleTable中的行时通过级联删除Table2中的行。只需将ON CASCADE DELETETable2的外键添加到MiddleTable定义即可。
  3. 如果您的数据库支持,则推迟外键约束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试重试事务方法失败,并违反了约束

为什么这违反了类型约束?

违反了实体框架 6 的多重约束

恢复时违反了 Postgresql 约束

SQLite找出违反了哪些约束

错误:对表“ tablename”的更新或删除违反了外键约束

涉及UICollectionViewCell和子视图的约束问题违反了逻辑

更新操作违反了唯一约束

为什么这违反了类型参数“ TUser”的约束?

Django POST违反了非null约束user_id

重复键值违反了Django中的唯一约束

向User类添加属性违反了TContext类型的约束

为什么CVXPY求解器违反了此简单约束

WAS 6.1 java.lang.VerifyError:违反了类加载约束

“ MyIdentityModels.User”违反了类型“ TUser”的约束

Hibernate / Postgres:重复的键值违反了唯一约束

更新错误:导航属性违反了PRIMARY KEY约束

Django:重复的键值违反了唯一约束

SSIS错误-值违反了列的架构约束

重复的键值违反了唯一约束Django

在ArangoDB中插入或更新文档失败,违反了约束

导入的数据,重复的键值违反了唯一约束

Docker Swarm 模式在创建时违反了约束?

重复的键值违反了SaveChangesAsync的唯一约束

列中的空值违反了非空约束 PostgreSQL

重复的键值违反了 Django Python 的唯一约束

PostgreSQL:不违反null:7错误:“ id”列中的null值违反了非null约束

勺式转换的更新给出“重复的键值违反了唯一约束”

PG :: ForeignKeyViolation:错误:对表“ xxx”的更新或删除违反了外键约束