Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: e4cc531a by tchemit at 2019-09-12T10:46:48Z [SYNCHRO AVANCEE] Une requête SQL échoue sur mise à jour d'une espèce - Closes #1374 - - - - - 3 changed files: - services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java Changes: ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceLocal.java ===================================== @@ -55,12 +55,14 @@ public class ReferentialSynchronizeServiceLocal extends ObserveServiceLocal impl byte[] insertSqlCode = oppositeSqlsRequest.getInsertSqlCode(); byte[] insertAssociationSqlCode = oppositeSqlsRequest.getInsertAssociationSqlCode(); byte[] updateSqlCode = oppositeSqlsRequest.getUpdateSqlCode(); + byte[] updateAssociationSqlCode = oppositeSqlsRequest.getUpdateAssociationSqlCode(); byte[] deleteSqlCode = request.getDeleteSqlCode(); byte[] desactivateSqlCode = request.getDesactivateSqlCode(); getTopiaPersistenceContext().executeSqlScripts(deleteAssociationSqlCode, insertSqlCode, insertAssociationSqlCode, updateSqlCode, + updateAssociationSqlCode, desactivateSqlCode, deleteSqlCode); timeLog.log(startTime, "executeSqlsRequests"); ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java ===================================== @@ -158,7 +158,7 @@ public class UpdateSqlStatementGenerator<D extends ReferentialDto> { String id = referentialDto.getId(); for (TopiaMetadataAssociation association : associations) { // On commence toujours par supprimer toutes les anciennes associations, elles seront ré-ajoutées juste après - String deleteSql = TopiaSqlStatements.generateAssociationDeleteStatement(association, id); + String deleteSql = TopiaSqlStatements.generateManyToManyAssociationDeleteStatement(association, id); result.add(TopiaSqlStatements.boxAssociationStatement(deleteSql)); Collection<ReferentialDtoReference<?, ?>> associationValues = binder.obtainSourceProperty(referentialDto, association.getTargetPropertyName()); ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java ===================================== @@ -40,6 +40,7 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { private final byte[] insertAssociationSqlCode; private final byte[] insertSqlCode; private final byte[] updateSqlCode; + private final byte[] updateAssociationSqlCode; private final byte[] deleteAssociationSqlCode; private final byte[] deleteSqlCode; private final byte[] desactivateSqlCode; @@ -47,12 +48,14 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { private ReferentialSynchronizeSqlsRequest(String insertSqlCode, String insertAssociationSqlCode, String updateSqlCode, + String updateAssociationSqlCode, String deleteSqlCode, String deleteAssociationSqlCode, String desactivateSqlCode) { this.insertSqlCode = insertSqlCode.getBytes(); this.insertAssociationSqlCode = insertAssociationSqlCode.getBytes(); this.updateSqlCode = updateSqlCode.getBytes(); + this.updateAssociationSqlCode= updateAssociationSqlCode.getBytes(); this.deleteSqlCode = deleteSqlCode.getBytes(); this.deleteAssociationSqlCode = deleteAssociationSqlCode.getBytes(); this.desactivateSqlCode = desactivateSqlCode.getBytes(); @@ -78,6 +81,10 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { return insertAssociationSqlCode; } + public byte[] getUpdateAssociationSqlCode() { + return updateAssociationSqlCode; + } + public byte[] getDeleteAssociationSqlCode() { return deleteAssociationSqlCode; } @@ -91,6 +98,7 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { private final StringBuilder addAssociationTasksBuilder = new StringBuilder(); private final StringBuilder addTasksBuilder = new StringBuilder(); private final StringBuilder updateTasksBuilder = new StringBuilder(); + private final StringBuilder updateAssociationTasksBuilder = new StringBuilder(); private final StringBuilder deleteTasksBuilder = new StringBuilder(); private final StringBuilder deleteAssociationTasksBuilder = new StringBuilder(); private final StringBuilder desactivateTasksBuilder = new StringBuilder(); @@ -99,6 +107,7 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { return new ReferentialSynchronizeSqlsRequest(addTasksBuilder.toString(), addAssociationTasksBuilder.toString(), updateTasksBuilder.toString(), + updateAssociationTasksBuilder.toString(), deleteTasksBuilder.toString(), deleteAssociationTasksBuilder.toString(), desactivateTasksBuilder.toString()); @@ -116,7 +125,11 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { public Builder addUpdateStatement(String sql) { log.info("Add update sql: " + sql); - updateTasksBuilder.append(sql); + if (sql.startsWith(TopiaSqlStatements.ASSOCIATION_STATEMENT_PREFIX)) { + updateAssociationTasksBuilder.append(TopiaSqlStatements.unboxAssociationStatement(sql)); + } else { + updateTasksBuilder.append(sql); + } return this; } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/e4cc531a2f3a3f940b4bdf5bfa3c... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/e4cc531a2f3a3f940b4bdf5bfa3c... You're receiving this email because of your account on gitlab.com.