Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
违反Mybatis Spring事务性多重删除约束_Spring_Transactions_Mybatis_Delete Row - Fatal编程技术网

违反Mybatis Spring事务性多重删除约束

违反Mybatis Spring事务性多重删除约束,spring,transactions,mybatis,delete-row,Spring,Transactions,Mybatis,Delete Row,我正在与Spring 3和Mybatis 3合作 当我想进行级联删除时,一切正常 我有两个表,中间有一个M-M关系表。类似于表1->中间表---->表2 我想从midle表中删除数据,然后删除表2中相关的de数据 在使用事务性方法时 @Transactional public void relacionaReservaLibreBonoLibre(ParametrosRelacionReservaBono params) throws Exception{ ReservaBean r=r

我正在与Spring 3和Mybatis 3合作

当我想进行级联删除时,一切正常

我有两个表,中间有一个M-M关系表。类似于表1->中间表---->表2

我想从midle表中删除数据,然后删除表2中相关的de数据

在使用事务性方法时

@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);
        }
    }

}
它将约束冲突表2启动到中间表,该表中的约束冲突将被删除

drm.eliminaDocumentoReservaPorPK(drb);
有什么提示吗


提前感谢。

有几种选择:

  • 从表2中删除,然后从中间表中删除
  • 若这是可接受的(即中间表实体拥有Table2实体),那个么更改数据库中的外键,以便在删除中间表中的行时通过级联删除Table2中的行。只需在级联删除中将
    添加到表2中的外键到中间表定义中即可
  • 如果数据库支持,则将外键约束设为延迟
    第三个选项是我正在寻找的,我忘了说DB是PostgreSQL。谢谢
    drm.eliminaDocumentoReservaPorPK(drb);