diff --git a/src/main/java/com/avaje/ebean/config/ServerConfig.java b/src/main/java/com/avaje/ebean/config/ServerConfig.java index 0d0ec8d7a..3c1ce319c 100644 --- a/src/main/java/com/avaje/ebean/config/ServerConfig.java +++ b/src/main/java/com/avaje/ebean/config/ServerConfig.java @@ -198,9 +198,11 @@ public class ServerConfig { private PersistBatch persistBatch = PersistBatch.NONE; /** - * Use for per request batch mode. + * Use for cascade persist JDBC batch mode. INHERIT means use the platform default + * which is ALL except for SQL Server where it is NONE (as getGeneratedKeys isn't + * supported on SQL Server with JDBC batch). */ - private PersistBatch persistBatchOnCascade = PersistBatch.NONE; + private PersistBatch persistBatchOnCascade = PersistBatch.INHERIT; private int persistBatchSize = 20; @@ -2530,13 +2532,14 @@ public class ServerConfig { /** * Return the PersistBatch mode to use for 'batchOnCascade' taking into account if the database * platform supports getGeneratedKeys in batch mode. - *

- * Used to effectively turn off batchOnCascade for SQL Server - still allows explicit batch mode. - *

*/ public PersistBatch appliedPersistBatchOnCascade() { - return databasePlatform.isDisallowBatchOnCascade() ? PersistBatch.NONE : persistBatchOnCascade; + if (persistBatchOnCascade == PersistBatch.INHERIT) { + // use the platform default (ALL except SQL Server which has NONE) + return databasePlatform.getPersistBatchOnCascade(); + } + return persistBatchOnCascade; } /** diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java index 14351dd54..16aac20d5 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java @@ -2,6 +2,7 @@ package com.avaje.ebean.config.dbplatform; import com.avaje.ebean.BackgroundExecutor; import com.avaje.ebean.Query; +import com.avaje.ebean.config.PersistBatch; import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.dbmigration.ddlgeneration.DdlHandler; import com.avaje.ebean.dbmigration.ddlgeneration.platform.PlatformDdl; @@ -155,11 +156,9 @@ public class DatabasePlatform { protected boolean forwardOnlyHintOnFindIterate; /** - * Flag set for SQL Server due to lack of support of getGeneratedKeys in - * batch mode (meaning for batch inserts you should explicitly turn off - * getGeneratedKeys - joy). + * By default we use JDBC batch when cascading (except for SQL Server). */ - protected boolean disallowBatchOnCascade; + protected PersistBatch persistBatchOnCascade = PersistBatch.ALL; protected PlatformDdl platformDdl; @@ -542,14 +541,10 @@ public class DatabasePlatform { } /** - * Return true if the persistBatchOnCascade setting should be ignored. - *

- * This is primarily for SQL Server which does not support getGeneratedKeys with jdbc batch mode - * so can't really be transparently used. - *

+ * Return the platform default JDBC batch mode for persist cascade. */ - public boolean isDisallowBatchOnCascade() { - return disallowBatchOnCascade; + public PersistBatch getPersistBatchOnCascade() { + return persistBatchOnCascade; } /** diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2000Platform.java b/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2000Platform.java index afcb42a8b..5fd072352 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2000Platform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2000Platform.java @@ -1,5 +1,7 @@ package com.avaje.ebean.config.dbplatform; +import com.avaje.ebean.config.PersistBatch; + import java.sql.Types; /** @@ -18,6 +20,7 @@ public class MsSqlServer2000Platform extends DatabasePlatform { public MsSqlServer2000Platform() { super(); this.name = "mssqlserver2000"; + this.persistBatchOnCascade = PersistBatch.NONE; this.dbIdentity.setIdType(IdType.IDENTITY); this.dbIdentity.setSupportsGetGeneratedKeys(false); this.dbIdentity.setSelectLastInsertedIdTemplate("select @@IDENTITY as X"); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2005Platform.java b/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2005Platform.java index a71372c78..8a0882bb6 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2005Platform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/MsSqlServer2005Platform.java @@ -1,5 +1,6 @@ package com.avaje.ebean.config.dbplatform; +import com.avaje.ebean.config.PersistBatch; import com.avaje.ebean.dbmigration.ddlgeneration.platform.MsSqlServerDdl; import java.sql.Types; @@ -21,7 +22,7 @@ public class MsSqlServer2005Platform extends DatabasePlatform { this.name = "mssqlserver2005"; // effectively disable persistBatchOnCascade mode for SQL Server // due to lack of support for getGeneratedKeys in batch mode - this.disallowBatchOnCascade = true; + this.persistBatchOnCascade = PersistBatch.NONE; this.idInExpandedForm = true; this.selectCountWithAlias = true; this.sqlLimiter = new MsSqlServer2005SqlLimiter(); diff --git a/src/test/resources/ebean.properties b/src/test/resources/ebean.properties index e5fa48cef..28c472181 100644 --- a/src/test/resources/ebean.properties +++ b/src/test/resources/ebean.properties @@ -19,8 +19,7 @@ ebean.ddl.generate=true ebean.ddl.run=true datasource.default=h2 -ebean.persistBatch=NONE -ebean.persistBatchOnCascade=ALL +#ebean.persistBatch=NONE ebean.currentUserProvider=com.avaje.ebean.MyCurrentUserProvider #ebean.expressionNativeIlike=true