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