diff --git a/composites/ebean-clickhouse/pom.xml b/composites/ebean-clickhouse/pom.xml
index 7f36b70243..fd5d5f3daf 100644
--- a/composites/ebean-clickhouse/pom.xml
+++ b/composites/ebean-clickhouse/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-clickhouse
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-cockroach/pom.xml b/composites/ebean-cockroach/pom.xml
index 9cbec67898..ee7b45113b 100644
--- a/composites/ebean-cockroach/pom.xml
+++ b/composites/ebean-cockroach/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-db2/pom.xml b/composites/ebean-db2/pom.xml
index 2dd142b7a2..9a806317b6 100644
--- a/composites/ebean-db2/pom.xml
+++ b/composites/ebean-db2/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-db2
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-h2/pom.xml b/composites/ebean-h2/pom.xml
index 8e2baea354..9965a2375c 100644
--- a/composites/ebean-h2/pom.xml
+++ b/composites/ebean-h2/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-h2
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-hana/pom.xml b/composites/ebean-hana/pom.xml
index 7b159fab4f..c2d3a76a4d 100644
--- a/composites/ebean-hana/pom.xml
+++ b/composites/ebean-hana/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-hana
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-mariadb/pom.xml b/composites/ebean-mariadb/pom.xml
index a52b55164d..1fd36a9479 100644
--- a/composites/ebean-mariadb/pom.xml
+++ b/composites/ebean-mariadb/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-mariadb
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-mysql/pom.xml b/composites/ebean-mysql/pom.xml
index 990e53ef99..a8920e7616 100644
--- a/composites/ebean-mysql/pom.xml
+++ b/composites/ebean-mysql/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-mysql
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-net-postgis/pom.xml b/composites/ebean-net-postgis/pom.xml
index 9dcbfe40f7..e3b9e43fde 100644
--- a/composites/ebean-net-postgis/pom.xml
+++ b/composites/ebean-net-postgis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -22,13 +22,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -47,19 +47,19 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-net-postgis-types
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-nuodb/pom.xml b/composites/ebean-nuodb/pom.xml
index 659805d77f..d376d4fbfd 100644
--- a/composites/ebean-nuodb/pom.xml
+++ b/composites/ebean-nuodb/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-nuodb
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-oracle/pom.xml b/composites/ebean-oracle/pom.xml
index 67a4112900..7e8a81f81a 100644
--- a/composites/ebean-oracle/pom.xml
+++ b/composites/ebean-oracle/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-oracle
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-pgvector/pom.xml b/composites/ebean-pgvector/pom.xml
index 1cf754eb3c..efe96fbd9e 100644
--- a/composites/ebean-pgvector/pom.xml
+++ b/composites/ebean-pgvector/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -22,13 +22,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -47,19 +47,19 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-pgvector-types
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-postgis/pom.xml b/composites/ebean-postgis/pom.xml
index 12d35fea26..4c5e063d41 100644
--- a/composites/ebean-postgis/pom.xml
+++ b/composites/ebean-postgis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -22,13 +22,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -47,19 +47,19 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-postgis-types
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-postgres/pom.xml b/composites/ebean-postgres/pom.xml
index 23096c6bc5..a2b7709ac5 100644
--- a/composites/ebean-postgres/pom.xml
+++ b/composites/ebean-postgres/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-sqlite/pom.xml b/composites/ebean-sqlite/pom.xml
index f6c8736fa2..ccdffb5596 100644
--- a/composites/ebean-sqlite/pom.xml
+++ b/composites/ebean-sqlite/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-sqlite
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-sqlserver/pom.xml b/composites/ebean-sqlserver/pom.xml
index 028aa8963e..855d603fa0 100644
--- a/composites/ebean-sqlserver/pom.xml
+++ b/composites/ebean-sqlserver/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-sqlserver
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean-yugabyte/pom.xml b/composites/ebean-yugabyte/pom.xml
index 715c9cba8f..77a5449d99 100644
--- a/composites/ebean-yugabyte/pom.xml
+++ b/composites/ebean-yugabyte/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -42,13 +42,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
diff --git a/composites/ebean/pom.xml b/composites/ebean/pom.xml
index 125bfc1d9a..0cd9b94524 100644
--- a/composites/ebean/pom.xml
+++ b/composites/ebean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -17,13 +17,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
@@ -41,7 +41,7 @@
io.ebean
ebean-jackson-mapper
- 18.2.0
+ 18.3.0
@@ -60,13 +60,13 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-all
- 18.2.0
+ 18.3.0
diff --git a/composites/pom.xml b/composites/pom.xml
index 7e6bc4f80d..3b3c5ff837 100644
--- a/composites/pom.xml
+++ b/composites/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
composites
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index f216cd5d16..75caa7156f 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean api
diff --git a/ebean-bench/pom.xml b/ebean-bench/pom.xml
index 215bf1a97c..fad4a910b1 100644
--- a/ebean-bench/pom.xml
+++ b/ebean-bench/pom.xml
@@ -6,7 +6,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean-bench
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index e436d5f2ae..baec21e396 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean bom
@@ -89,25 +89,25 @@
io.ebean
ebean
- 18.2.0
+ 18.3.0
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
io.ebean
ebean-core-type
- 18.2.0
+ 18.3.0
@@ -125,13 +125,13 @@
io.ebean
ebean-jackson-mapper
- 18.2.0
+ 18.3.0
io.ebean
ebean-ddl-generator
- 18.2.0
+ 18.3.0
@@ -155,37 +155,37 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
io.ebean
querybean-generator
- 18.2.0
+ 18.3.0
io.ebean
kotlin-querybean-generator
- 18.2.0
+ 18.3.0
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
io.ebean
ebean-redis
- 18.2.0
+ 18.3.0
io.ebean
ebean-spring-txn
- 18.2.0
+ 18.3.0
@@ -193,91 +193,91 @@
io.ebean
ebean-clickhouse
- 18.2.0
+ 18.3.0
io.ebean
ebean-db2
- 18.2.0
+ 18.3.0
io.ebean
ebean-h2
- 18.2.0
+ 18.3.0
io.ebean
ebean-hana
- 18.2.0
+ 18.3.0
io.ebean
ebean-mariadb
- 18.2.0
+ 18.3.0
io.ebean
ebean-mysql
- 18.2.0
+ 18.3.0
io.ebean
ebean-nuodb
- 18.2.0
+ 18.3.0
io.ebean
ebean-oracle
- 18.2.0
+ 18.3.0
io.ebean
ebean-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-postgis
- 18.2.0
+ 18.3.0
io.ebean
ebean-postgis-types
- 18.2.0
+ 18.3.0
io.ebean
ebean-pgvector
- 18.2.0
+ 18.3.0
io.ebean
ebean-pgvector-types
- 18.2.0
+ 18.3.0
io.ebean
ebean-sqlite
- 18.2.0
+ 18.3.0
io.ebean
ebean-sqlserver
- 18.2.0
+ 18.3.0
diff --git a/ebean-core-json/pom.xml b/ebean-core-json/pom.xml
index dd7bce9e49..a1e4f720f1 100644
--- a/ebean-core-json/pom.xml
+++ b/ebean-core-json/pom.xml
@@ -3,7 +3,7 @@
io.ebean
ebean-parent
- 18.2.0
+ 18.3.0
ebean-core-json
ebean-core-json
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index 9b47edb411..be4725089f 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean-core-type
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index 57ed943d12..a2a275466a 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -3,7 +3,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean-core
@@ -22,13 +22,13 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
io.ebean
ebean-core-json
- 18.2.0
+ 18.3.0
@@ -52,7 +52,7 @@
io.ebean
ebean-core-type
- 18.2.0
+ 18.3.0
@@ -157,21 +157,21 @@
io.ebean
ebean-platform-h2
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-platform-sqlserver
- 18.2.0
+ 18.3.0
test
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsPostgres.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsPostgres.java
index 484a4ba871..aca82fb289 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsPostgres.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsPostgres.java
@@ -18,12 +18,14 @@ final class InsertMetaOptionsPostgres implements InsertMetaOptions {
private final InsertMeta meta;
private final BeanDescriptor> desc;
private final String baseTable;
+ private final List nonUpdatableColumns;
private final Map sqlCache = new ConcurrentHashMap<>();
InsertMetaOptionsPostgres(InsertMeta meta, BeanDescriptor> desc) {
this.meta = meta;
this.desc = desc;
this.baseTable = desc.baseTable();
+ this.nonUpdatableColumns = InsertMetaOptionsSupport.nonUpdatableColumns(desc);
}
@Override
@@ -84,6 +86,7 @@ private String generate(boolean withId, boolean doNothing, InsertOptions options
private void setColumns(boolean withId, GenerateDmlRequest request, List uniqueColumns) {
List columns = request.columns();
columns.removeAll(uniqueColumns);
+ columns.removeAll(nonUpdatableColumns);
if (withId) {
BeanProperty idProperty = desc.idProperty();
if (idProperty != null && !idProperty.isEmbedded()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsSqlite.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsSqlite.java
index 71d1599218..dbe19df97e 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsSqlite.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsSqlite.java
@@ -21,12 +21,14 @@ final class InsertMetaOptionsSqlite implements InsertMetaOptions {
private final InsertMeta meta;
private final BeanDescriptor> desc;
private final String baseTable;
+ private final List nonUpdatableColumns;
private final Map sqlCache = new ConcurrentHashMap<>();
InsertMetaOptionsSqlite(InsertMeta meta, BeanDescriptor> desc) {
this.meta = meta;
this.desc = desc;
this.baseTable = desc.baseTable();
+ this.nonUpdatableColumns = InsertMetaOptionsSupport.nonUpdatableColumns(desc);
}
@Override
@@ -85,6 +87,7 @@ private String generate(boolean withId, boolean doNothing, InsertOptions options
private void setColumns(boolean withId, GenerateDmlRequest request, List uniqueColumns) {
List columns = request.columns();
columns.removeAll(uniqueColumns);
+ columns.removeAll(nonUpdatableColumns);
if (withId) {
BeanProperty idProperty = desc.idProperty();
if (idProperty != null && !idProperty.isEmbedded()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsSupport.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsSupport.java
new file mode 100644
index 0000000000..6f3a153dd4
--- /dev/null
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMetaOptionsSupport.java
@@ -0,0 +1,37 @@
+package io.ebeaninternal.server.persist.dml;
+
+import io.ebeaninternal.server.deploy.BeanDescriptor;
+import io.ebeaninternal.server.deploy.BeanProperty;
+import io.ebeaninternal.server.deploy.generatedproperty.GeneratedProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Shared support for the platform specific insert on conflict do update generation.
+ */
+final class InsertMetaOptionsSupport {
+
+ private InsertMetaOptionsSupport() {
+ }
+
+ /**
+ * Return the columns that should be excluded from the generated "do update set" clause
+ * as they are not updatable, e.g. {@code @Column(updatable=false)} or a generated property
+ * that is insert only such as {@code @WhenCreated}/{@code @WhoCreated}.
+ */
+ static List nonUpdatableColumns(BeanDescriptor> desc) {
+ List columns = new ArrayList<>();
+ for (BeanProperty prop : desc.propertiesNonTransient()) {
+ if (!prop.isDbUpdatable() || isInsertOnlyGenerated(prop)) {
+ columns.add(prop.dbColumn());
+ }
+ }
+ return columns;
+ }
+
+ private static boolean isInsertOnlyGenerated(BeanProperty prop) {
+ GeneratedProperty gen = prop.generatedProperty();
+ return gen != null && gen.includeInInsert() && !gen.includeInUpdate();
+ }
+}
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index 0214314092..ea03ac00c0 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean ddl generation
@@ -28,14 +28,14 @@
io.ebean
ebean-core-type
- 18.2.0
+ 18.3.0
provided
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
@@ -65,7 +65,7 @@
io.ebean
ebean-platform-all
- 18.2.0
+ 18.3.0
test
diff --git a/ebean-jackson-mapper/pom.xml b/ebean-jackson-mapper/pom.xml
index 8d91513c07..2d98fae8e4 100644
--- a/ebean-jackson-mapper/pom.xml
+++ b/ebean-jackson-mapper/pom.xml
@@ -3,7 +3,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
4.0.0
@@ -15,7 +15,7 @@
io.ebean
ebean-core-type
- 18.2.0
+ 18.3.0
provided
diff --git a/ebean-net-postgis-types/pom.xml b/ebean-net-postgis-types/pom.xml
index 9dcb3a8fdc..33d1b0d27c 100644
--- a/ebean-net-postgis-types/pom.xml
+++ b/ebean-net-postgis-types/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean net postgis types
@@ -19,14 +19,14 @@
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
@@ -54,7 +54,7 @@
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
diff --git a/ebean-opentelemetry/pom.xml b/ebean-opentelemetry/pom.xml
index 83ff065b1b..b23a60fa83 100644
--- a/ebean-opentelemetry/pom.xml
+++ b/ebean-opentelemetry/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean-opentelemetry
@@ -28,7 +28,7 @@
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
@@ -71,21 +71,21 @@
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
test
io.ebean
querybean-generator
- 18.2.0
+ 18.3.0
provided
diff --git a/ebean-pgvector-types/pom.xml b/ebean-pgvector-types/pom.xml
index c2513f6e0a..9b5b522217 100644
--- a/ebean-pgvector-types/pom.xml
+++ b/ebean-pgvector-types/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean pgvector types
@@ -19,14 +19,14 @@
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
@@ -54,7 +54,7 @@
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
diff --git a/ebean-postgis-types/pom.xml b/ebean-postgis-types/pom.xml
index 1528bceb7a..ec8cb6869f 100644
--- a/ebean-postgis-types/pom.xml
+++ b/ebean-postgis-types/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean postgis types
@@ -19,14 +19,14 @@
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
@@ -62,7 +62,7 @@
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index 169a4b61ca..ade5d1dd65 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean querybean
@@ -17,7 +17,7 @@
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
@@ -59,14 +59,14 @@
io.ebean
ebean-ddl-generator
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
@@ -80,7 +80,7 @@
io.ebean
querybean-generator
- 18.2.0
+ 18.3.0
provided
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index 9a50c3117a..ac1994d3b5 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean-redis
@@ -29,35 +29,35 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
provided
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
io.ebean
querybean-generator
- 18.2.0
+ 18.3.0
provided
diff --git a/ebean-redisson/pom.xml b/ebean-redisson/pom.xml
index 7bf11436ca..14b58b16a0 100644
--- a/ebean-redisson/pom.xml
+++ b/ebean-redisson/pom.xml
@@ -6,7 +6,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean-redisson
@@ -29,35 +29,35 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
provided
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
io.ebean
querybean-generator
- 18.2.0
+ 18.3.0
provided
diff --git a/ebean-spring-txn/pom.xml b/ebean-spring-txn/pom.xml
index 73e8bf7f75..108bd7143d 100644
--- a/ebean-spring-txn/pom.xml
+++ b/ebean-spring-txn/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean-spring-txn
@@ -28,7 +28,7 @@
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
@@ -77,7 +77,7 @@
io.ebean
ebean-test
- 18.2.0
+ 18.3.0
test
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index cb2c3d2d12..f323529087 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
ebean test
@@ -33,20 +33,20 @@
io.ebean
ebean-platform-h2
- 18.2.0
+ 18.3.0
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
provided
io.ebean
ebean-ddl-generator
- 18.2.0
+ 18.3.0
@@ -149,14 +149,14 @@
io.ebean
ebean-jackson-mapper
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-platform-all
- 18.2.0
+ 18.3.0
test
diff --git a/ebean-test/src/test/java/org/tests/insert/EConflictWithCreated.java b/ebean-test/src/test/java/org/tests/insert/EConflictWithCreated.java
new file mode 100644
index 0000000000..fd0ddc8bce
--- /dev/null
+++ b/ebean-test/src/test/java/org/tests/insert/EConflictWithCreated.java
@@ -0,0 +1,61 @@
+package org.tests.insert;
+
+import io.ebean.annotation.Index;
+import io.ebean.annotation.WhenCreated;
+import io.ebean.annotation.WhenModified;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import java.time.Instant;
+
+/**
+ * Used to verify that insert on conflict do update excludes insert-only generated
+ * properties (such as {@code @WhenCreated}) from the generated update set clause.
+ */
+@Entity
+public class EConflictWithCreated {
+
+ @Id
+ Long id;
+
+ @Index(unique = true)
+ String code;
+
+ @WhenCreated
+ Instant whenCreated;
+
+ @WhenModified
+ Instant whenUpdated;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public Instant getWhenCreated() {
+ return whenCreated;
+ }
+
+ public void setWhenCreated(Instant whenCreated) {
+ this.whenCreated = whenCreated;
+ }
+
+ public Instant getWhenUpdated() {
+ return whenUpdated;
+ }
+
+ public void setWhenUpdated(Instant whenUpdated) {
+ this.whenUpdated = whenUpdated;
+ }
+}
diff --git a/ebean-test/src/test/java/org/tests/insert/TestInsertOnConflict.java b/ebean-test/src/test/java/org/tests/insert/TestInsertOnConflict.java
index a02ff02fbf..6bdee0c438 100644
--- a/ebean-test/src/test/java/org/tests/insert/TestInsertOnConflict.java
+++ b/ebean-test/src/test/java/org/tests/insert/TestInsertOnConflict.java
@@ -307,6 +307,35 @@ void insertOnConflictNothing_when_noIdValue() {
assertThat(list.get(0).getWhenUpdated()).isEqualTo(bean.getWhenUpdated());
}
+ @ForPlatform({Platform.POSTGRES, Platform.YUGABYTE, Platform.SQLITE})
+ @Test
+ void insertOnConflictUpdate_excludesWhenCreatedFromUpdateSet() {
+ Database db = DB.getDefault();
+ db.truncate(EConflictWithCreated.class);
+ LoggedSql.start();
+
+ var bean = new EConflictWithCreated();
+ bean.setCode("abc");
+ db.insert(bean, ON_CONFLICT_UPDATE);
+
+ var bean2 = new EConflictWithCreated();
+ bean2.setCode("abc");
+ db.insert(bean2, ON_CONFLICT_UPDATE);
+
+ var sql = LoggedSql.stop();
+ assertThat(sql).hasSize(2);
+ // when_created is not included in the "do update set" clause - it is insert only
+ assertThat(sql.get(0)).contains("on conflict (code) do update set when_updated=excluded.when_updated");
+ assertThat(sql.get(0)).doesNotContain("when_created=excluded.when_created");
+ assertThat(sql.get(1)).contains("on conflict (code) do update set when_updated=excluded.when_updated");
+ assertThat(sql.get(1)).doesNotContain("when_created=excluded.when_created");
+
+ List list = db.find(EConflictWithCreated.class).findList();
+ assertThat(list).hasSize(1);
+ // original whenCreated value is preserved rather than being overwritten by the 2nd insert
+ assertThat(list.get(0).getWhenCreated()).isEqualTo(bean.getWhenCreated());
+ }
+
@ForPlatform({Platform.POSTGRES, Platform.YUGABYTE})
@Test
void updateQueryReturning() throws SQLException {
diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml
index f3e53114fb..b81016fabb 100644
--- a/kotlin-querybean-generator/pom.xml
+++ b/kotlin-querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
kotlin querybean generator
@@ -21,7 +21,7 @@
io.ebean
ebean-querybean
- 18.2.0
+ 18.3.0
test
@@ -35,7 +35,7 @@
io.ebean
ebean-core
- 18.2.0
+ 18.3.0
test
@@ -56,14 +56,14 @@
io.ebean
ebean-platform-h2
- 18.2.0
+ 18.3.0
test
io.ebean
ebean-ddl-generator
- 18.2.0
+ 18.3.0
test
diff --git a/platforms/all/pom.xml b/platforms/all/pom.xml
index 7c125f6afa..7c1510a311 100644
--- a/platforms/all/pom.xml
+++ b/platforms/all/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -16,67 +16,67 @@
io.ebean
ebean-platform-h2
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-clickhouse
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-db2
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-hana
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-hsqldb
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-mysql
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-mariadb
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-nuodb
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-oracle
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-postgres
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-sqlanywhere
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-sqlite
- 18.2.0
+ 18.3.0
io.ebean
ebean-platform-sqlserver
- 18.2.0
+ 18.3.0
diff --git a/platforms/clickhouse/pom.xml b/platforms/clickhouse/pom.xml
index ed67537adc..4f9d20483d 100644
--- a/platforms/clickhouse/pom.xml
+++ b/platforms/clickhouse/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
diff --git a/platforms/db2/pom.xml b/platforms/db2/pom.xml
index 921cc21b27..ae0618055b 100644
--- a/platforms/db2/pom.xml
+++ b/platforms/db2/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0
diff --git a/platforms/h2/pom.xml b/platforms/h2/pom.xml
index 928cb8b7df..51230c159e 100644
--- a/platforms/h2/pom.xml
+++ b/platforms/h2/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 18.2.0
+ 18.3.0
../..
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 18.2.0
+ 18.3.0