diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java index bf4c61675..be2ac6c1f 100644 --- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java +++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java @@ -232,6 +232,12 @@ public class DatabaseConfig { */ private String historyTableSuffix = "_history"; + /** + * When true explicit transactions beans that have been made dirty will be + * automatically persisted via update on flush. + */ + private boolean autoPersistUpdates; + /** * Use for transaction scoped batch mode. */ @@ -905,6 +911,20 @@ public class DatabaseConfig { this.tenantCatalogProvider = tenantCatalogProvider; } + /** + * Return true if dirty beans are automatically persisted. + */ + public boolean isAutoPersistUpdates() { + return autoPersistUpdates; + } + + /** + * Set to true if dirty beans are automatically persisted. + */ + public void setAutoPersistUpdates(boolean autoPersistUpdates) { + this.autoPersistUpdates = autoPersistUpdates; + } + /** * Return the PersistBatch mode to use by default at the transaction level. *
@@ -2807,6 +2827,7 @@ public class DatabaseConfig { loadDocStoreSettings(p); defaultServer = p.getBoolean("defaultServer", defaultServer); + autoPersistUpdates = p.getBoolean("autoPersistUpdates", autoPersistUpdates); loadModuleInfo = p.getBoolean("loadModuleInfo", loadModuleInfo); maxCallStack = p.getInt("maxCallStack", maxCallStack); dumpMetricsOnShutdown = p.getBoolean("dumpMetricsOnShutdown", dumpMetricsOnShutdown); @@ -3348,7 +3369,7 @@ public class DatabaseConfig { this.loadModuleInfo = loadModuleInfo; } - public enum UuidVersion { + public enum UuidVersion { VERSION4, VERSION1, VERSION1RND diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java index bb672cd33..411331aef 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java @@ -211,11 +211,12 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { this.batchOnCascadeMode = false; this.onQueryOnly = OnQueryOnly.ROLLBACK; } else { + this.transparentPersistence = explicit && manager.isAutoPersistUpdates(); this.logSql = manager.isLogSql(); this.logSummary = manager.isLogSummary(); this.skipCacheAfterWrite = manager.isSkipCacheAfterWrite(); - this.batchMode = manager.getPersistBatch(); - this.batchOnCascadeMode = manager.getPersistBatchOnCascade(); + this.batchMode = manager.isPersistBatch(); + this.batchOnCascadeMode = manager.isPersistBatchOnCascade(); this.onQueryOnly = manager.getOnQueryOnly(); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java index 45885ad2a..b71868e5d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java @@ -104,6 +104,8 @@ public class TransactionManager implements SpiTransactionManager { */ final DocStoreUpdateProcessor docStoreUpdateProcessor; + private final boolean autoPersistUpdates; + private final boolean persistBatch; private final boolean persistBatchOnCascade; @@ -165,6 +167,7 @@ public class TransactionManager implements SpiTransactionManager { this.supportsSavepointId = databasePlatform.isSupportsSavepointId(); this.skipCacheAfterWrite = options.config.isSkipCacheAfterWrite(); this.notifyL2CacheInForeground = options.notifyL2CacheInForeground; + this.autoPersistUpdates = options.config.isAutoPersistUpdates(); this.persistBatch = PersistBatch.ALL == options.config.getPersistBatch(); this.persistBatchOnCascade = PersistBatch.ALL == options.config.appliedPersistBatchOnCascade(); this.rollbackOnChecked = options.config.isTransactionRollbackOnChecked(); @@ -283,11 +286,15 @@ public class TransactionManager implements SpiTransactionManager { return bulkEventListenerMap; } - boolean getPersistBatch() { + boolean isAutoPersistUpdates() { + return autoPersistUpdates; + } + + boolean isPersistBatch() { return persistBatch; } - public boolean getPersistBatchOnCascade() { + boolean isPersistBatchOnCascade() { return persistBatchOnCascade; } diff --git a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java b/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java index f93c18d26..4e92798d6 100644 --- a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java +++ b/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java @@ -149,6 +149,7 @@ public class ServerConfigTest { ServerConfig serverConfig = new ServerConfig(); assertTrue(serverConfig.isIdGeneratorAutomatic()); assertTrue(serverConfig.isDefaultServer()); + assertFalse(serverConfig.isAutoPersistUpdates()); serverConfig.setIdGeneratorAutomatic(false); assertFalse(serverConfig.isIdGeneratorAutomatic()); @@ -166,6 +167,8 @@ public class ServerConfigTest { serverConfig.setLoadModuleInfo(false); assertFalse(serverConfig.isAutoLoadModuleInfo()); + serverConfig.setAutoPersistUpdates(true); + assertTrue(serverConfig.isAutoPersistUpdates()); } @Test