Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: 56f88bf2 by tchemit at 2019-05-13T11:42:54Z [SYNCHRO SIMPLE] Une requête DELETE échoue pour cause de violation de contrainte FK - Closes #1270 - - - - - 2 changed files: - pom.xml - services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java Changes: ===================================== pom.xml ===================================== @@ -165,7 +165,7 @@ <lib.version.java4all.eugene>3.0-alpha-26</lib.version.java4all.eugene> <lib.version.java4all.jaxx>3.0-alpha-50</lib.version.java4all.jaxx> <!--<lib.version.java4all.i18n>4.0-beta-8-SNAPSHOT</lib.version.java4all.i18n>--> - <lib.version.java4all.topia>1.1.12</lib.version.java4all.topia> + <lib.version.java4all.topia>1.1.13</lib.version.java4all.topia> <!--<lib.version.nuiton.topia>3.6-SNAPSHOT</lib.version.nuiton.topia>--> <!--<lib.version.java4all.eugene>3.0-alpha-21</lib.version.java4all.eugene>--> ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/DeleteSqlStatementGenerator.java ===================================== @@ -23,6 +23,9 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql; */ import com.google.common.collect.ImmutableList; +import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; +import fr.ird.observe.persistence.ObserveEntityEnum; +import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.metadata.TopiaMetadataAssociation; import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; @@ -42,11 +45,13 @@ import java.util.Set; public class DeleteSqlStatementGenerator { private final Set<TopiaMetadataAssociation> associations; + private final Set<TopiaMetadataAssociation> reverseAssociations; private final TopiaMetadataEntity metadataEntity; public DeleteSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, TopiaMetadataEntity metadataEntity) { this.metadataEntity = Objects.requireNonNull(metadataEntity); - this.associations = topiaMetadataModel.getReverseAssociations(metadataEntity); + this.associations = topiaMetadataModel.getAssociations(metadataEntity); + this.reverseAssociations = topiaMetadataModel.getReverseAssociations(metadataEntity); } public List<String> generateSql(String id) { @@ -54,9 +59,19 @@ public class DeleteSqlStatementGenerator { String sql = TopiaSqlStatements.generateDeleteStatement(metadataEntity, id); result.add(sql); for (TopiaMetadataAssociation association : associations) { - String sql2 = TopiaSqlStatements.generateAssociationDeleteStatement(association, id); + String sql2 = TopiaSqlStatements.generateManyToManyAssociationDeleteStatement(association, id); result.add(TopiaSqlStatements.boxAssociationStatement(sql2)); } + for (TopiaMetadataAssociation association : reverseAssociations) { + Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf(association.getOwner().getType()).getContract(); + if (ObserveReferentialEntity.class.isAssignableFrom(entityType)) { + // always delete referential associations + // this is the opposite of https://gitlab.com/ultreiaio/ird-observe/issues/1065 + // See https://gitlab.com/ultreiaio/ird-observe/issues/11270 + String sql2 = TopiaSqlStatements.generateAssociationDeleteStatement(association, id); + result.add(TopiaSqlStatements.boxAssociationStatement(sql2)); + } + } return result.build(); } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/56f88bf235707db3bf619f038fb7... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/56f88bf235707db3bf619f038fb7... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT