This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 7e3478a7c70637f38a0736f91a99d94fb9ee7d7b Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Jul 5 12:45:49 2016 +0200 Quelques corrections suite au test du moteur de synchronisation (See #7739) --- .../actions/synchro/RemoteReferentialDiff.java | 13 ++-- ...UnidirectionalReferentialSynchronizeEngine.java | 37 +++++---- ...ectionalReferentialSynchronizeLocalService.java | 19 ++++- .../synchro/ReplaceSqlStatementGenerator.java | 44 +++++------ ...nalReferentialSynchronizeLocalServiceTopia.java | 23 +++++- ...alReferentialSynchronizeRemoteServiceTopia.java | 6 +- .../synchro/UpdateSqlStatementGenerator.java | 89 ++++++++++++---------- 7 files changed, 133 insertions(+), 98 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/RemoteReferentialDiff.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/RemoteReferentialDiff.java index 83787d2..8900844 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/RemoteReferentialDiff.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/RemoteReferentialDiff.java @@ -7,6 +7,7 @@ import fr.ird.observe.services.dto.referential.ReferentialReference; import java.io.Serializable; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; @@ -32,9 +33,9 @@ public class RemoteReferentialDiff implements Serializable { */ private final Multimap<String, ReferentialDto> referentialsToUpdate; /** - * Les références de référentiels à supprimer (indexé par nom de référentiel). + * Les identifiants de référentiels à supprimer (indexé par nom de référentiel). */ - private final Multimap<String, ReferentialReference> referentialsToRemove; + private final Multimap<String, String> referentialsToRemove; /** * Les références de référentiels à changer (ils sont devenus obsolètes) (indexé par nom de référentiel). */ @@ -63,8 +64,8 @@ public class RemoteReferentialDiff implements Serializable { return (Collection) referentialsToUpdate.get(referentialName); } - public <R extends ReferentialDto> Collection<ReferentialReference<R>> getReferentialsToRemove(String referentialName) { - return (Collection)referentialsToRemove.get(referentialName); + public Set<String> getReferentialsToRemove(String referentialName) { + return new HashSet<>(referentialsToRemove.get(referentialName)); } public <R extends ReferentialDto> Collection<ReferentialReference<R>> getReferentialsToFix(String referentialName) { @@ -85,9 +86,9 @@ public class RemoteReferentialDiff implements Serializable { referentialsToUpdate.put(referentialName, referentialDto); } - void addReferentialToDelete(String referentialName, ReferentialReference referentialReference) { + void addReferentialToDelete(String referentialName, String id) { referentialNames.add(referentialName); - referentialsToRemove.put(referentialName, referentialReference); + referentialsToRemove.put(referentialName, id); } void addReferentialToFix(String referentialName, ReferentialReference referentialReference) { diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java index 44f22f6..031241d 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java @@ -62,20 +62,16 @@ public class UnidirectionalReferentialSynchronizeEngine { referentialsToUpdate.forEach(builder::entityToUpdate); } - Collection<ReferentialReference<R>> referentialsToRemove = remoteReferentialDiff.getReferentialsToRemove(referentialName); - Collection<ReferentialReference<R>> blockingReferentialsToRemove = null; - if (CollectionUtils.isNotEmpty(referentialsToRemove)) { + Set<String> idsToRemove = remoteReferentialDiff.getReferentialsToRemove(referentialName); + Set<String> blockingIdsToRemove = null; - Set<String> idsToRemove = referentialsToRemove.stream() - .map(ReferentialReference::getId) - .collect(Collectors.toCollection(LinkedHashSet::new)); + if (CollectionUtils.isNotEmpty(idsToRemove)) { - Set<String> blockingIdsToRemove = localService.filterIdsUsedInLocalSource(referentialName, idsToRemove); + Set<String> blockingIdsToRemoveFromLocal = localService.filterIdsUsedInLocalSource(referentialName, idsToRemove); - - blockingReferentialsToRemove = referentialsToRemove + blockingIdsToRemove = idsToRemove .stream() - .filter(referentialReference -> blockingIdsToRemove.contains(referentialReference.getId())) + .filter(blockingIdsToRemoveFromLocal::contains) .collect(Collectors.toSet()); idsToRemove.removeAll(blockingIdsToRemove); @@ -94,16 +90,16 @@ public class UnidirectionalReferentialSynchronizeEngine { Set<String> blockingIdsToReplace = localService.filterIdsUsedInLocalSource(referentialName, idsToReplace); - blockingReferentialsToReplace = referentialsToRemove + blockingReferentialsToReplace = referentialsToReplace .stream() .filter(referentialReference -> blockingIdsToReplace.contains(referentialReference.getId())) .collect(Collectors.toSet()); } - boolean needCallbackForRemove = CollectionUtils.isNotEmpty(blockingReferentialsToRemove); - boolean needCallbackToReplace = CollectionUtils.isNotEmpty(blockingReferentialsToReplace); - boolean needCallback = needCallbackForRemove || needCallbackToReplace; + boolean needCallbackForRemove = CollectionUtils.isNotEmpty(blockingIdsToRemove); + boolean needCallbackForReplace = CollectionUtils.isNotEmpty(blockingReferentialsToReplace); + boolean needCallback = needCallbackForRemove || needCallbackForReplace; if (needCallback) { // calcul de l'univers de référentiels disponibles pour les remplacements @@ -113,8 +109,9 @@ public class UnidirectionalReferentialSynchronizeEngine { if (needCallbackForRemove) { - CallbackRequest callbackRequest = CallbackRequest.of(referentialName, blockingReferentialsToRemove, availableReferentials); - Map<String, String> referentialsToRemoveIds = callback.askUserToReplaceDisabledReferentials(callbackRequest); + Set<ReferentialReference<R>> blockingReferentialsToRemove = localService.getLocalSourceReferentialToDelete(referentialName, blockingIdsToRemove); + CallbackRequest<R> callbackRequest = CallbackRequest.of(referentialName, blockingReferentialsToRemove, availableReferentials); + Map<String, String> referentialsToRemoveIds = callback.askUserToReplaceRemovedReferentials(callbackRequest); for (Map.Entry<String, String> entry : referentialsToRemoveIds.entrySet()) { builder.entityToReplace(entry.getKey(), entry.getValue()); builder.entityToRemove(entry.getKey()); @@ -122,9 +119,9 @@ public class UnidirectionalReferentialSynchronizeEngine { } - if (needCallbackToReplace) { + if (needCallbackForReplace) { - CallbackRequest callbackRequest = CallbackRequest.of(referentialName, referentialsToReplace, availableReferentials); + CallbackRequest<R> callbackRequest = CallbackRequest.of(referentialName, referentialsToReplace, availableReferentials); Map<String, String> referentialsToReplaceIds = callback.askUserToReplaceDisabledReferentials(callbackRequest); for (Map.Entry<String, String> entry : referentialsToReplaceIds.entrySet()) { builder.entityToReplace(entry.getKey(), entry.getValue()); @@ -141,9 +138,9 @@ public class UnidirectionalReferentialSynchronizeEngine { public interface Callback { - Map<String, String> askUserToReplaceRemovedReferentials(CallbackRequest request); + <R extends ReferentialDto> Map<String, String> askUserToReplaceRemovedReferentials(CallbackRequest<R> request); - Map<String, String> askUserToReplaceDisabledReferentials(CallbackRequest request); + <R extends ReferentialDto> Map<String, String> askUserToReplaceDisabledReferentials(CallbackRequest<R> request); } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java index 7a08962..bdc0026 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java @@ -2,13 +2,13 @@ package fr.ird.observe.services.service.actions.synchro; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.spi.NoDataAccess; import fr.ird.observe.services.spi.PostRequest; import fr.ird.observe.services.spi.ReadReferentialPermission; import fr.ird.observe.services.spi.Write; import fr.ird.observe.services.spi.WriteReferentialPermission; -import java.util.Collection; import java.util.Set; /** @@ -34,16 +34,29 @@ public interface UnidirectionalReferentialSynchronizeLocalService extends Observ * les identifiants sont passés en paramètres qui sont réellement utilisés dans la source locale. * * @param referentialName le nom du référentiel - * @param ids l'identifiant du référentiel dont on recherche le nombre d'utilisation + * @param ids les identifiants du référentiel dont on recherche le nombre d'utilisation * @return les identifiants des référentiels passés en paramètres qui sont réellement utilisés dans la source locale. */ @ReadReferentialPermission - Set<String> filterIdsUsedInLocalSource(String referentialName, Collection<String> ids); + Set<String> filterIdsUsedInLocalSource(String referentialName, Set<String> ids); + + /** + * Pour récupérer les références sur les référentiels d'un certain type à supprimer, + * cet ensemble servira à les afficher dans l'interface graphique pour effectuer le remplacement. + * + * @param ids les identifiants des référentiels à supprimer + * @param referentialName le nom du référentiel à récupérer + * @param <R> type des référentiels à récupérer + * @return l'ensemble des références de référentiel à supprimer. + */ + @ReadReferentialPermission + <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(String referentialName, Set<String> ids); /** * Pour produire le code sql à partir de la demande pour un référentiel donné. * * @param request la demande des actions à produire pour un référentiel donné + * @param <R> type des référentiels à traiter * @return l'ensemble des requètes sql à appliquer. */ @NoDataAccess diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java index e0d6e9d..919959a 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java @@ -21,7 +21,7 @@ public class ReplaceSqlStatementGenerator { /** Logger. */ private static final Log log = LogFactory.getLog(ReplaceSqlStatementGenerator.class); - private static final String MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', SET topiaVersion = topiaVersion + 1 WHERE topiaId = '%s';\n"; + private static final String MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', topiaVersion = topiaVersion + 1 WHERE %s = '%s';\n"; private static final String MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s' WHERE %s = '%s';\n"; /** @@ -58,33 +58,15 @@ public class ReplaceSqlStatementGenerator { for (ReplacementStruct replacementStruct : manyToOneAssociationReplacements) { - String sql = String.format(MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT, - replacementStruct.schemaName, - replacementStruct.tableName, - replacementStruct.columnName, - replacementId, - sourceId); - if (log.isDebugEnabled()) { - log.debug("sql: " + sql); - } + String sql = generateSqlStatement(MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT, sourceId, replacementId, replacementStruct); builder.append(sql); } for (ReplacementStruct replacementStruct : manyToManyAssociationReplacements) { - String sql = String.format(MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT, - replacementStruct.schemaName, - replacementStruct.tableName, - replacementStruct.columnName, - replacementId, - replacementStruct.columnName, - sourceId); - if (log.isDebugEnabled()) { - log.debug("sql: " + sql); - } + String sql = generateSqlStatement(MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT, sourceId, replacementId, replacementStruct); builder.append(sql); - } return builder.toString(); @@ -101,7 +83,7 @@ public class ReplaceSqlStatementGenerator { .filter(entry -> entry.getValue().equals(referentialName)) .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(), metadataEntity.getDbTableName(), - metadataEntity.getDbColumnName(entry.getValue()))) + metadataEntity.getDbColumnName(entry.getKey()))) .collect(Collectors.toList())); } @@ -120,7 +102,7 @@ public class ReplaceSqlStatementGenerator { .filter(entry -> entry.getValue().equals(referentialName)) .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(), metadataEntity.getBdManyToManyAssociationTableName(entry.getValue()), - metadataEntity.getDbColumnName(entry.getValue()))) + metadataEntity.getDbColumnName(entry.getKey()))) .collect(Collectors.toList())); } @@ -129,4 +111,20 @@ public class ReplaceSqlStatementGenerator { } + private String generateSqlStatement(String sqlPattern, String sourceId, String replacementId, ReplacementStruct replacementStruct) { + + String sql = String.format(sqlPattern, + replacementStruct.schemaName, + replacementStruct.tableName, + replacementStruct.columnName, + replacementId, + replacementStruct.columnName, + sourceId); + if (log.isDebugEnabled()) { + log.debug("sql: " + sql); + } + return sql; + + } + } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java index 7d8a7dc..36b8049 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java @@ -6,6 +6,7 @@ import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.binder.BinderEngine; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaDao; @@ -17,7 +18,7 @@ import org.nuiton.topia.persistence.support.TopiaSqlWork; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; -import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -54,7 +55,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser } @Override - public Set<String> filterIdsUsedInLocalSource(String referentialName, Collection<String> ids) { + public Set<String> filterIdsUsedInLocalSource(String referentialName, Set<String> ids) { if (log.isTraceEnabled()) { log.trace("filterIdsUsedInLocalSource(" + referentialName + ", " + ids + ")"); @@ -74,6 +75,15 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser } @Override + public <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(String referentialName, Set<String> ids) { + + ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(referentialName); + Class entityType = entityEnum.getContract(); + return getLocalSourceReferentialToDelete0(entityType, ids); + + } + + @Override public <R extends ReferentialDto> Set<String> generateSqlRequests(UnidirectionalReferentialSynchronizeRequest<R> request) { if (log.isTraceEnabled()) { @@ -111,7 +121,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser if (request.withReferentialToReplace()) { - ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentialName); + ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentialName); for (Map.Entry<String, String> entry : request.getReferentialToReplace().entrySet()) { String sql = sqlStatementGenerator.generateSql(entry.getKey(), entry.getValue()); result.add(sql); @@ -167,6 +177,13 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser } + private <E extends ObserveReferentialEntity> Set<E> getLocalSourceReferentialToDelete0(Class<E> entityType, Set<String> ids) { + + TopiaDao<E> dao = getTopiaPersistenceContext().getDao(entityType); + return new HashSet<>(dao.forTopiaIdIn(ids).findAll()); + + } + private static class ApplySqlRequestWork implements TopiaSqlWork { private static final int BATCH_SIZE = 100; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java index ce860fc..fb2dcc6 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java @@ -113,9 +113,9 @@ public class UnidirectionalReferentialSynchronizeRemoteServiceTopia extends Obse idsToDelete.removeAll(centralIds); for (String id : idsToDelete) { - E e = dao.forTopiaIdEquals(id).findUnique(); - ReferentialReference<ReferentialDto> referentialReference = binderEngine.transformEntityToReferentialReferenceDto(referentialLocale, e); - result.addReferentialToDelete(entityName, referentialReference); + + // entité supprimée, il faudra que l'utilisateur la change + result.addReferentialToDelete(entityName, id); } } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java index 365e0f4..ff34ac9 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java @@ -29,7 +29,7 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { /** Logger. */ private static final Log log = LogFactory.getLog(UpdateSqlStatementGenerator.class); - private static final String UPDATE_STATEMENT = "UPDATE %s.%s %s WHERE topiaId ='%s';\n"; + private static final String UPDATE_STATEMENT = "UPDATE %s.%s SET %s WHERE topiaId ='%s';\n"; private static final String MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n"; private static final String MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n"; @@ -70,10 +70,12 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { public UpdateSqlStatementGenerator(TopiaMetadataEntity metadataEntity, Class<R> dtoType) { this.schemaName = metadataEntity.getDbSchemaName(); this.tableName = metadataEntity.getDbTableName(); + Set<String> simplePropertyNamesSet = metadataEntity.getProperties().keySet(); this.simplePropertyNames = simplePropertyNamesSet.toArray(new String[simplePropertyNamesSet.size()]); + Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet(); - this.manyToOneAssociationNames = simplePropertyNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); + this.manyToOneAssociationNames = manyToOneAssociationNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); Map<String, String> manyToManyAssociationsMap = metadataEntity.getManyToManyAssociations(); this.manyToManyAssociations = new LinkedHashSet<>(); @@ -92,54 +94,61 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { StringBuilder parameters = new StringBuilder(); - addStringParameter(TopiaEntity.PROPERTY_TOPIA_ID, referentialDto.getId(), parameters); addOtherTypeParameter(TopiaEntity.PROPERTY_TOPIA_VERSION, referentialDto.getVersion(), parameters); addDateParameter(TopiaEntity.PROPERTY_TOPIA_CREATE_DATE, referentialDto.getCreateDate(), parameters); - Map<String, Object> simpleProperties = binder.obtainProperties(referentialDto, true, simplePropertyNames); - for (Map.Entry<String, Object> entry : simpleProperties.entrySet()) { + if (simplePropertyNames.length > 0) { - String simplePropertyName = entry.getKey(); - String columnName = columnNames.get(simplePropertyName); - Object simplePropertyValue = entry.getValue(); + Map<String, Object> simpleProperties = binder.obtainProperties(referentialDto, true, simplePropertyNames); + for (Map.Entry<String, Object> entry : simpleProperties.entrySet()) { + + String simplePropertyName = entry.getKey(); + String columnName = columnNames.get(simplePropertyName); + Object simplePropertyValue = entry.getValue(); + + if (simplePropertyValue == null) { + addNullParameter(columnName, parameters); + continue; + } + if (simplePropertyValue instanceof String) { + addStringParameter(columnName, (String) simplePropertyValue, parameters); + continue; + } + if (simplePropertyValue instanceof Date) { + addDateParameter(columnName, (Date) simplePropertyValue, parameters); + continue; + } + if (simplePropertyValue instanceof Enum) { + addEnumParameter(columnName, (Enum) simplePropertyValue, parameters); + continue; + } + addOtherTypeParameter(columnName, simplePropertyValue, parameters); - if (simplePropertyValue == null) { - addNullParameter(columnName, parameters); - continue; - } - if (simplePropertyValue instanceof String) { - addStringParameter(columnName, (String) simplePropertyValue, parameters); - continue; - } - if (simplePropertyValue instanceof Date) { - addDateParameter(columnName, (Date) simplePropertyValue, parameters); - continue; - } - if (simplePropertyValue instanceof Enum) { - addEnumParameter(columnName, (Enum) simplePropertyValue, parameters); - continue; } - addOtherTypeParameter(columnName, simplePropertyValue, parameters); } - Map<String, Object> manyToOneAssociations = binder.obtainProperties(referentialDto, true, manyToOneAssociationNames); - for (Map.Entry<String, Object> entry : manyToOneAssociations.entrySet()) { + if (manyToOneAssociationNames.length > 0) { - String manyToOneAssociationName = entry.getKey(); - String columnName = columnNames.get(manyToOneAssociationName); - Object manyToOneAssociationValue = entry.getValue(); + Map<String, Object> manyToOneAssociations = binder.obtainProperties(referentialDto, true, manyToOneAssociationNames); + for (Map.Entry<String, Object> entry : manyToOneAssociations.entrySet()) { + + String manyToOneAssociationName = entry.getKey(); + String columnName = columnNames.get(manyToOneAssociationName); + Object manyToOneAssociationValue = entry.getValue(); + + if (manyToOneAssociationValue == null) { + addNullParameter(columnName, parameters); + continue; + } + if (manyToOneAssociationValue instanceof ReferentialDto) { + addReferentialDtoParameter(columnName, (ReferentialDto) manyToOneAssociationValue, parameters); + continue; + } + if (manyToOneAssociationValue instanceof ReferentialReference) { + addReferentialReferenceParameter(columnName, (ReferentialReference) manyToOneAssociationValue, parameters); + } - if (manyToOneAssociationValue == null) { - addNullParameter(columnName, parameters); - continue; - } - if (manyToOneAssociationValue instanceof ReferentialDto) { - addReferentialDtoParameter(columnName, (ReferentialDto) manyToOneAssociationValue, parameters); - continue; - } - if (manyToOneAssociationValue instanceof ReferentialReference) { - addReferentialReferenceParameter(columnName, (ReferentialReference) manyToOneAssociationValue, parameters); } } @@ -254,6 +263,6 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { } private void addParameter0(String columnName, String value, StringBuilder parameters) { - parameters.append(", SET ").append(columnName).append(" = ").append(value); + parameters.append(", ").append(columnName).append(" = ").append(value); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.