From 0b7113113606e9c391c7e6f83a0acd8c13cceca7 Mon Sep 17 00:00:00 2001 From: lining <2016220101025@std.uestc.edu.cn> Date: Fri, 17 Apr 2020 03:39:31 +0800 Subject: [PATCH] HHH-13214 Delete re-firing SQL from previous calls --- .../spi/id/inline/AbstractInlineIdsDeleteHandlerImpl.java | 7 ++++++- .../spi/id/inline/AbstractInlineIdsUpdateHandlerImpl.java | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsDeleteHandlerImpl.java b/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsDeleteHandlerImpl.java index 87663cddb4..6a60d22acd 100644 --- a/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsDeleteHandlerImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsDeleteHandlerImpl.java @@ -8,6 +8,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.Collections; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -32,7 +33,7 @@ public abstract class AbstractInlineIdsDeleteHandlerImpl extends AbstractInlineIdsBulkIdHandler implements MultiTableBulkIdStrategy.DeleteHandler { - private final List deletes = new ArrayList<>(); + private List deletes; public AbstractInlineIdsDeleteHandlerImpl( SessionFactoryImplementor factory, @@ -42,6 +43,9 @@ public AbstractInlineIdsDeleteHandlerImpl( @Override public String[] getSqlStatements() { + if ( deletes.isEmpty() ) { + return new String[0]; + } return deletes.toArray( new String[deletes.size()] ); } @@ -51,6 +55,7 @@ public int execute( QueryParameters queryParameters) { IdsClauseBuilder values = prepareInlineStatement( session, queryParameters ); + deletes = new ArrayList<>(); if ( !values.getIds().isEmpty() ) { final String idSubselect = values.toStatement(); diff --git a/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsUpdateHandlerImpl.java b/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsUpdateHandlerImpl.java index 8db4752a96..04acedf428 100644 --- a/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsUpdateHandlerImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/hql/spi/id/inline/AbstractInlineIdsUpdateHandlerImpl.java @@ -35,7 +35,7 @@ public abstract class AbstractInlineIdsUpdateHandlerImpl extends AbstractInlineIdsBulkIdHandler implements MultiTableBulkIdStrategy.UpdateHandler { - private final Map updates = new LinkedHashMap<>(); + private Map updates; private ParameterSpecification[][] assignmentParameterSpecifications; @@ -47,6 +47,9 @@ public AbstractInlineIdsUpdateHandlerImpl( @Override public String[] getSqlStatements() { + if ( updates == null ) { + return new String[0]; + } return updates.values().toArray( new String[updates.values().size()] ); } @@ -56,6 +59,7 @@ public int execute( QueryParameters queryParameters) { IdsClauseBuilder values = prepareInlineStatement( session, queryParameters ); + updates = new LinkedHashMap<>(); if ( !values.getIds().isEmpty() ) {