From c62b63119b4a7539aabc0e24c6f33b311c5615af Mon Sep 17 00:00:00 2001 From: "robin.bygrave" Date: Tue, 18 Aug 2026 15:48:26 +1200 Subject: [PATCH 1/8] Fix test pom versions to 18.5.0 after release --- tests/test-dto-mapping/pom.xml | 2 +- tests/test-java16/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test-dto-mapping/pom.xml b/tests/test-dto-mapping/pom.xml index 46ce88b1f..256478d94 100644 --- a/tests/test-dto-mapping/pom.xml +++ b/tests/test-dto-mapping/pom.xml @@ -5,7 +5,7 @@ tests io.ebean - 18.4.0 + 18.5.0 test-dto-mapping diff --git a/tests/test-java16/pom.xml b/tests/test-java16/pom.xml index 3869a4932..391b52c8a 100644 --- a/tests/test-java16/pom.xml +++ b/tests/test-java16/pom.xml @@ -5,7 +5,7 @@ tests io.ebean - 18.4.0 + 18.5.0 test-java16 From 952d9940e7647756d0d96fecec1188c63111f9f6 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 17 Sep 2026 15:57:38 +1200 Subject: [PATCH 2/8] #3882 - Fix querybean-generator:19.3.0+ warning: Failed to write EntityClassRegister (#3884) Fix a regression introduced in 19.3.0 via early creation of EntityClassRegister source file Co-authored-by: robin.bygrave --- .../ebean/querybean/generator/Processor.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java index 213e06ff5..473c7ef13 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java @@ -19,6 +19,8 @@ public class Processor extends AbstractProcessor implements Constants { private ProcessingContext processingContext; private DtoMappingReader dtoMappingReader; private boolean wroteDtoMappers; + private SimpleModuleInfoWriter moduleWriter; + private boolean initModuleWriter; private boolean wroteLookup; @@ -59,6 +61,7 @@ public class Processor extends AbstractProcessor implements Constants { final int loaded = processingContext.complete(); dtoMappingReader.collect(roundEnv); if (!roundEnv.processingOver()) { + initModuleInfoBean(); writeDtoMappers(); } if (roundEnv.processingOver()) { @@ -109,24 +112,33 @@ public class Processor extends AbstractProcessor implements Constants { } } + private void initModuleInfoBean() { + if (initModuleWriter || !processingContext.hasAnyEntitiesOrOther()) { + return; + } + try { + moduleWriter = new SimpleModuleInfoWriter(processingContext); + } catch (FilerException e) { + processingContext.logWarn(null, "FilerException trying to write EntityClassRegister error: " + e); + } catch (Throwable e) { + processingContext.logError(null, "Failed to initialise EntityClassRegister error:" + e + " stack:" + Arrays.toString(e.getStackTrace())); + } finally { + initModuleWriter = true; + } + } + /** - * Write the {@code EbeanEntityRegister} at the end of processing - deferred until there is - * something to actually register (rather than eagerly reserving/creating the source file up - * front), since a compilation unit with no {@code @Entity}/{@code @Embeddable}/{@code @Converter} - * /other classes at all - e.g. a test-source-only module that only declares - * {@code @DtoMapping} - has nothing meaningful to write and no factory package to derive a - * sensible location from. + * Write the {@code EbeanEntityRegister} at the end of processing. The source file is reserved + * during an earlier round by {@link #initModuleInfoBean()} so javac does not warn that it was + * created in the final round. */ private void writeModuleInfoBean() { - if (!processingContext.hasAnyEntitiesOrOther()) { + if (moduleWriter == null) { processingContext.logNote("EbeanEntityRegister skipped - no entities or other classes found"); return; } try { - SimpleModuleInfoWriter moduleWriter = new SimpleModuleInfoWriter(processingContext); moduleWriter.write(); - } catch (FilerException e) { - processingContext.logWarn(null, "FilerException trying to write EntityClassRegister error: " + e); } catch (Throwable e) { processingContext.logError(null, "Failed to write EntityClassRegister error:" + e + " stack:" + Arrays.toString(e.getStackTrace())); } From 2f1625316beec4bfefc28455bed34b971496954b Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 17 Sep 2026 16:09:09 +1200 Subject: [PATCH 3/8] Postgis: Add GraalVM native image reflect-config.json for org.postgis.DriverWrapperLW etc (#3885) This is handy when compiling to native image with GraalVM and using Postgis and DriverWrapperLW Co-authored-by: robin.bygrave --- .../io.ebean/ebean-platform-postgres/reflect-config.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json diff --git a/platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json b/platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json new file mode 100644 index 000000000..9a042678a --- /dev/null +++ b/platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json @@ -0,0 +1,5 @@ +[ + {"name": "org.postgis.DriverWrapperLW", "allDeclaredConstructors": true, "allDeclaredFields": true}, + {"name": "org.postgis.DriverWrapper", "allDeclaredConstructors": true, "allDeclaredFields": true}, + {"name": "org.postgis.DriverWrapper$TypesAdder80", "allDeclaredConstructors": true, "allDeclaredFields": true} +] From 69f39f9c82b82bd281415b2183aa6ee75bf4b3d8 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 17 Sep 2026 16:10:40 +1200 Subject: [PATCH 4/8] Publish timed metric max values over rolling 59-second windows (#3880) * Publish timed metric max values over rolling 59-second windows * Publish timed metric max values over rolling 59-second windows Use "now - 2 * WINDOW_NANOS" on initialise and reset to ensure the next collection publishes. --------- Co-authored-by: robin.bygrave --- .../server/profile/DTimedMetric.java | 20 ++++---- .../server/profile/ValueMax.java | 48 +++++++++++++++++++ .../server/profile/DQueryPlanMetricTest.java | 20 ++++++-- .../server/profile/DTimedMetricTest.java | 23 ++++++--- 4 files changed, 92 insertions(+), 19 deletions(-) create mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/profile/ValueMax.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java index 619f9f921..2c283a969 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java @@ -3,8 +3,6 @@ package io.ebeaninternal.server.profile; import io.ebean.meta.MetricVisitor; import io.ebean.metric.TimedMetric; -import java.util.concurrent.atomic.LongAccumulator; - /** * Used to collect timed execution statistics. *

@@ -16,12 +14,17 @@ final class DTimedMetric implements TimedMetric { private final String name; private final ValueAdder count = new ValueAdder(); private final ValueAdder total = new ValueAdder(); - private final LongAccumulator max = new LongAccumulator(Math::max, 0); + private final ValueMax max; private boolean collected; private String reportName; DTimedMetric(String name) { + this(name, new ValueMax()); + } + + DTimedMetric(String name, ValueMax max) { this.name = name; + this.max = max; } @Override @@ -31,7 +34,7 @@ final class DTimedMetric implements TimedMetric { final long mean = totalMicros / batch; count.add(batch); total.add(totalMicros); - max.accumulate(mean); + max.add(mean); } } @@ -44,7 +47,7 @@ final class DTimedMetric implements TimedMetric { public void add(long value) { count.add(1); total.add(value); - max.accumulate(value); + max.add(value); } @Override @@ -76,6 +79,7 @@ final class DTimedMetric implements TimedMetric { @Override public DTimeMetricStats collect(MetricVisitor.Mode mode) { + final long maxValue = max.collect(); final long countSum; switch (mode) { case RESET: @@ -93,14 +97,14 @@ final class DTimedMetric implements TimedMetric { if (countSum == 0) { return null; } else { - return stats(mode, name, countSum); + return stats(mode, name, countSum, maxValue); } } /** * Return the current statistics resetting the internal values if reset is true. */ - private DTimeMetricStats stats(MetricVisitor.Mode mode, String name, long countSum) { + private DTimeMetricStats stats(MetricVisitor.Mode mode, String name, long countSum, long maxValue) { try { final long totalSum; switch (mode) { @@ -116,7 +120,7 @@ final class DTimedMetric implements TimedMetric { default: throw new IllegalStateException("Unknown metric collection mode"); } - return new DTimeMetricStats(name, collected, countSum, totalSum, max.getThenReset()); + return new DTimeMetricStats(name, collected, countSum, totalSum, maxValue); } finally { collected = true; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/ValueMax.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/ValueMax.java new file mode 100644 index 000000000..11e3a7702 --- /dev/null +++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/ValueMax.java @@ -0,0 +1,48 @@ +package io.ebeaninternal.server.profile; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.LongAccumulator; +import java.util.function.LongSupplier; + +/** + * Accumulates a maximum value and publishes it in rolling 59-second windows. + */ +final class ValueMax { + + private static final long WINDOW_NANOS = TimeUnit.SECONDS.toNanos(59); + + private final LongSupplier nanoTime; + private final LongAccumulator value; + private volatile long published; + private long lastResetNanos; + + ValueMax() { + this(System::nanoTime); + } + + ValueMax(LongSupplier nanoTime) { + this.nanoTime = nanoTime; + this.value = new LongAccumulator(Math::max, 0); + this.lastResetNanos = nanoTime.getAsLong() - 2 * WINDOW_NANOS; + } + + void add(long amount) { + value.accumulate(amount); + } + + synchronized long collect() { + long now = nanoTime.getAsLong(); + if (now - lastResetNanos >= WINDOW_NANOS) { + published = value.getThenReset(); + lastResetNanos = now; + } + return published; + } + + synchronized void reset() { + value.reset(); + published = 0; + lastResetNanos = nanoTime.getAsLong() - 2 * WINDOW_NANOS; + } + +} diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DQueryPlanMetricTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DQueryPlanMetricTest.java index 5f8651fdb..55298cf00 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DQueryPlanMetricTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DQueryPlanMetricTest.java @@ -5,19 +5,22 @@ import io.ebean.meta.MetaQueryMetric; import org.junit.jupiter.api.Test; import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; import java.util.function.Function; import static org.assertj.core.api.Assertions.assertThat; class DQueryPlanMetricTest { + private final AtomicLong nanoTime = new AtomicLong(); Function naming = (String name) -> "prefix[" + name.replace('.', '-') + "]"; @Test void visit() { DQueryPlanMeta meta = new DQueryPlanMeta(Object.class, "dto.Object.lab", "lab", null, "sql", "hash"); - DTimedMetric metric = new DTimedMetric("org.timed.plan"); + DTimedMetric metric = new DTimedMetric("org.timed.plan", new ValueMax(nanoTime::get)); DQueryPlanMetric planMetric = new DQueryPlanMetric(meta, metric); metric.add(560); @@ -46,10 +49,10 @@ class DQueryPlanMetricTest { } @Test - void visitCumulativeResetsMax() { + void visitCumulativePublishesSharedMax() { DQueryPlanMeta meta = new DQueryPlanMeta(Object.class, "dto.Object.lab", "lab", null, "sql", "hash"); - DTimedMetric metric = new DTimedMetric("org.timed.plan"); + DTimedMetric metric = new DTimedMetric("org.timed.plan", new ValueMax(nanoTime::get)); DQueryPlanMetric planMetric = new DQueryPlanMetric(meta, metric); metric.add(560); @@ -74,7 +77,7 @@ class DQueryPlanMetricTest { assertThat(result.get(0).name()).isEqualTo("prefix[dto-Object-lab]"); assertThat(result.get(0).count()).isEqualTo(2); assertThat(result.get(0).total()).isEqualTo(820); - assertThat(result.get(0).max()).isEqualTo(0); + assertThat(result.get(0).max()).isEqualTo(560); } metric.add(410); @@ -87,7 +90,14 @@ class DQueryPlanMetricTest { assertThat(result.get(0).name()).isEqualTo("prefix[dto-Object-lab]"); assertThat(result.get(0).count()).isEqualTo(3); assertThat(result.get(0).total()).isEqualTo(1230); - assertThat(result.get(0).max()).isEqualTo(410); + assertThat(result.get(0).max()).isEqualTo(560); } + + nanoTime.addAndGet(TimeUnit.SECONDS.toNanos(59)); + BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming, false, true, true, true); + planMetric.visit(visitor); + List result = visitor.queryMetrics(); + assertThat(result).hasSize(1); + assertThat(result.get(0).max()).isEqualTo(410); } } diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java index d6629a0a2..78a484dbd 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java @@ -5,16 +5,20 @@ import io.ebean.meta.MetaTimedMetric; import org.junit.jupiter.api.Test; import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; import java.util.function.Function; import static org.assertj.core.api.Assertions.assertThat; public class DTimedMetricTest { + private final AtomicLong nanoTime = new AtomicLong(); + @Test public void addSinceNanos() throws InterruptedException { - DTimedMetric metric = new DTimedMetric("addSinceNanos"); + DTimedMetric metric = new DTimedMetric("addSinceNanos", new ValueMax(nanoTime::get)); long start = System.nanoTime(); Thread.sleep(11); @@ -28,6 +32,7 @@ public class DTimedMetricTest { metric.addSinceNanos(start); + nanoTime.addAndGet(TimeUnit.SECONDS.toNanos(59)); stats = metric.collect(true); assertThat(stats.count()).isEqualTo(1); assertThat(stats.total()).isGreaterThan(10); @@ -37,7 +42,7 @@ public class DTimedMetricTest { @Test public void addBatchSince() throws InterruptedException { - DTimedMetric metric = new DTimedMetric("addSinceNanos"); + DTimedMetric metric = new DTimedMetric("addSinceNanos", new ValueMax(nanoTime::get)); long start = System.nanoTime(); Thread.sleep(11); @@ -52,6 +57,7 @@ public class DTimedMetricTest { metric.addBatchSince(start, 2); + nanoTime.addAndGet(TimeUnit.SECONDS.toNanos(59)); stats = metric.collect(true); assertThat(stats.count()).isEqualTo(2); assertThat(stats.total()).isGreaterThan(10000); @@ -92,8 +98,8 @@ public class DTimedMetricTest { } @Test - void collectCumulativeResetsMax() { - DTimedMetric metric = new DTimedMetric("org.timed"); + void collectCumulativePublishesSharedMax() { + DTimedMetric metric = new DTimedMetric("org.timed", new ValueMax(nanoTime::get)); metric.add(560); metric.add(500); @@ -105,7 +111,7 @@ public class DTimedMetricTest { stats = metric.collect(false); assertThat(stats.count()).isEqualTo(2); assertThat(stats.total()).isEqualTo(1060); - assertThat(stats.max()).isEqualTo(0); + assertThat(stats.max()).isEqualTo(560); metric.add(160); metric.add(100); @@ -114,12 +120,16 @@ public class DTimedMetricTest { stats = metric.collect(false); assertThat(stats.count()).isEqualTo(5); assertThat(stats.total()).isEqualTo(1470); + assertThat(stats.max()).isEqualTo(560); + + nanoTime.addAndGet(TimeUnit.SECONDS.toNanos(59)); + stats = metric.collect(false); assertThat(stats.max()).isEqualTo(160); } @Test void cumulativeAndDeltaAreIndependent() { - DTimedMetric metric = new DTimedMetric("org.timed"); + DTimedMetric metric = new DTimedMetric("org.timed", new ValueMax(nanoTime::get)); metric.add(560); metric.add(500); @@ -132,6 +142,7 @@ public class DTimedMetricTest { DTimeMetricStats delta = metric.collect(true); assertThat(delta.count()).isEqualTo(3); assertThat(delta.total()).isEqualTo(1220); + assertThat(delta.max()).isEqualTo(560); cumulative = metric.collect(false); assertThat(cumulative).isNull(); From fd8ef48486c134a1df4a7b4b4bcf66f9007e57de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Sep 2026 16:11:11 +1200 Subject: [PATCH 5/8] Build(deps-dev): Bump org.mariadb.jdbc:mariadb-java-client (#3881) Bumps [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.0.7 to 3.3.5. - [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases) - [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/main/CHANGELOG.md) - [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.0.7...3.3.5) --- updated-dependencies: - dependency-name: org.mariadb.jdbc:mariadb-java-client dependency-version: 3.3.5 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ebean-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 0d5618397..01ef0f77a 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -240,7 +240,7 @@ org.mariadb.jdbc mariadb-java-client - 3.0.7 + 3.3.5 test From 328b13af185c6e772951c861b799ed4d422bfe11 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Fri, 18 Sep 2026 18:57:46 +1200 Subject: [PATCH 6/8] Dto mapper generation support for dbarray (#3886) * Dto mapper generation support for @DbArray Currently it is not detected DbArray and instead thinking its a ToMany which is invalid. * Dto mapper generation support for @DbJson collections Currently it is not detected and instead thinking its a ToMany which is invalid. --------- Co-authored-by: robin.bygrave --- .../querybean/generator/DtoMapperWriter.java | 8 +- .../querybean/generator/DtoMappingReader.java | 43 +++++- .../querybean/generator/DtoPropertyMeta.java | 35 ++++- .../generator/ProcessingContext.java | 21 ++- .../generator/DtoMapperDbArrayTest.java | 124 ++++++++++++++++++ 5 files changed, 217 insertions(+), 14 deletions(-) create mode 100644 querybean-generator/src/test/java/io/ebean/querybean/generator/DtoMapperDbArrayTest.java diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMapperWriter.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMapperWriter.java index b3e73ea2d..2422ed465 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMapperWriter.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMapperWriter.java @@ -234,9 +234,11 @@ class DtoMapperWriter { Set nestedAssocPaths = new LinkedHashSet<>(); for (DtoPropertyMeta property : activeProperties) { if ((property.kind() == DtoPropertyMeta.Kind.NESTED_ONE || property.kind() == DtoPropertyMeta.Kind.NESTED_MANY) + && !property.isUnfetchable() && !property.hasComputedSegment()) { nestedAssocPaths.add(property.sourcePropertyPath().get(0)); } else if (property.kind() == DtoPropertyMeta.Kind.SCALAR && property.isListTarget() + && !property.isScalarCollection() && !property.hasComputedSegment() && property.sourcePropertyPath().size() == 1) { // a single-segment SCALAR property whose DTO field is a List with no registered nested // DTO mapping of its own (e.g. @DtoConvert reducing a ToMany association) - still fully @@ -253,7 +255,7 @@ class DtoMapperWriter { switch (property.kind()) { case NESTED_ONE: case NESTED_MANY: - if (property.hasComputedSegment()) { + if (property.hasComputedSegment() || property.isUnfetchable()) { // a single-hop @DtoPath rename traversing a computed/derived getter (no backing // field) that happens to target a nested DTO type - just as unfetchable via // fetch(path, mapper.fetchGroup()) as the analogous SCALAR case, since "path" here @@ -267,7 +269,7 @@ class DtoMapperWriter { property.sourcePropertyPath().get(0), mapperFieldName(property))); break; case SCALAR: - if (property.hasComputedSegment()) { + if (property.hasComputedSegment() || property.isUnfetchable()) { // the path traverses a computed/derived getter (no backing field) - its own segments // past that point aren't real Ebean fetch paths, so don't add them to pathSelect/ // rootSelect at all; @DtoPath#requires() (plus the real prefix, if any) already names @@ -277,7 +279,7 @@ class DtoMapperWriter { } List path = property.sourcePropertyPath(); if (path.size() == 1) { - if (property.isListTarget()) { + if (property.isListTarget() && !property.isScalarCollection()) { // a single-segment path whose DTO field type is a List, but with no registered // nested DTO mapping of its own (e.g. a @DtoConvert-backed property reducing a // ToMany association to a simpler element type) - the source side is still a real diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMappingReader.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMappingReader.java index f6b0a5d20..0c0bcd87c 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMappingReader.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoMappingReader.java @@ -819,32 +819,37 @@ class DtoMappingReader { // straight into a NullPointerException. Default to the primitive's zero-equivalent value, // or fail fast with a clear message instead when @DtoPath(failOnNull = true). boolean isListTarget = listElementType(field.asType()) != null; + boolean scalarCollection = isListTarget && isScalarCollectionProperty(lastOwnerType, properties.get(properties.size() - 1)); DtoConverterMeta pathConverter = isListTarget ? converter : autoTypeConverter(converter, lastOwnerType != null ? getterReturnTypeMirror(lastOwnerType, lastGetter) : null, field.asType()); return new DtoPropertyMeta(name, DtoPropertyMeta.Kind.SCALAR, getters, properties, null, pathConverter, field.asType().getKind().isPrimitive(), pathPrism.failOnNull(), computedFrom >= 0, requiredFetchPaths, - isListTarget, false); + isListTarget, scalarCollection, false); } TypeMirror fieldType = field.asType(); TypeMirror listElementType = listElementType(fieldType); + boolean unfetchable = isUnfetchableProperty(meta.source(), name); if (listElementType != null) { DtoBeanMeta nested = lookupByTarget(listElementType); if (nested != null) { rejectConverterOnNested(field, converter, name, meta); - return new DtoPropertyMeta(name, DtoPropertyMeta.Kind.NESTED_MANY, List.of(getterName(meta.source(), name)), List.of(name), nested); + return new DtoPropertyMeta(name, DtoPropertyMeta.Kind.NESTED_MANY, List.of(getterName(meta.source(), name)), List.of(name), nested, + unfetchable, List.of()); } } else { DtoBeanMeta nested = lookupByTarget(fieldType); if (nested != null) { rejectConverterOnNested(field, converter, name, meta); - return new DtoPropertyMeta(name, DtoPropertyMeta.Kind.NESTED_ONE, List.of(getterName(meta.source(), name)), List.of(name), nested); + return new DtoPropertyMeta(name, DtoPropertyMeta.Kind.NESTED_ONE, List.of(getterName(meta.source(), name)), List.of(name), nested, + unfetchable, List.of()); } } String getter = getterName(meta.source(), name); + boolean scalarCollection = listElementType != null && isScalarCollectionProperty(meta.source(), name); DtoConverterMeta scalarConverter = listElementType != null ? converter : autoTypeConverter(converter, getterReturnTypeMirror(meta.source(), getter), fieldType); return new DtoPropertyMeta(name, DtoPropertyMeta.Kind.SCALAR, List.of(getter), List.of(name), null, scalarConverter, - fieldType.getKind().isPrimitive(), listElementType != null); + fieldType.getKind().isPrimitive(), false, false, List.of(), listElementType != null, scalarCollection, unfetchable, false); } /** @@ -1055,7 +1060,35 @@ class DtoMappingReader { for (TypeElement current = type; current != null; current = superclassOf(current)) { for (VariableElement f : ElementFilter.fieldsIn(current.getEnclosedElements())) { if (f.getSimpleName().contentEquals(propertyName)) { - return true; + return !ctx.isTransientField(f); + } + } + } + return false; + } + + private boolean isScalarCollectionProperty(TypeElement type, String propertyName) { + if (type == null) { + return false; + } + for (TypeElement current = type; current != null; current = superclassOf(current)) { + for (VariableElement field : ElementFilter.fieldsIn(current.getEnclosedElements())) { + if (field.getSimpleName().contentEquals(propertyName)) { + return ctx.isScalarCollectionField(field); + } + } + } + return false; + } + + private boolean isUnfetchableProperty(TypeElement type, String propertyName) { + if (type == null) { + return false; + } + for (TypeElement current = type; current != null; current = superclassOf(current)) { + for (VariableElement field : ElementFilter.fieldsIn(current.getEnclosedElements())) { + if (field.getSimpleName().contentEquals(propertyName)) { + return ctx.isTransientField(field); } } } diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoPropertyMeta.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoPropertyMeta.java index d3ca8d21c..c04f6bb09 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoPropertyMeta.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/DtoPropertyMeta.java @@ -30,6 +30,8 @@ class DtoPropertyMeta { private final boolean computedSegment; private final List requiredFetchPaths; private final boolean listTarget; + private final boolean scalarCollection; + private final boolean unfetchable; private final boolean ignored; DtoPropertyMeta(String dtoFieldName, Kind kind, List sourceGetterPath, List sourcePropertyPath, DtoBeanMeta nested) { @@ -44,7 +46,7 @@ class DtoPropertyMeta { * before ever consulting them. */ static DtoPropertyMeta ignored(String dtoFieldName, boolean listTarget) { - return new DtoPropertyMeta(dtoFieldName, Kind.SCALAR, List.of(), List.of(), null, null, false, false, false, List.of(), listTarget, true); + return new DtoPropertyMeta(dtoFieldName, Kind.SCALAR, List.of(), List.of(), null, null, false, false, false, List.of(), listTarget, false, false, true); } /** @@ -90,6 +92,22 @@ class DtoPropertyMeta { DtoPropertyMeta(String dtoFieldName, Kind kind, List sourceGetterPath, List sourcePropertyPath, DtoBeanMeta nested, DtoConverterMeta converter, boolean primitiveTarget, boolean failOnNull, boolean computedSegment, List requiredFetchPaths, boolean listTarget, boolean ignored) { + this(dtoFieldName, kind, sourceGetterPath, sourcePropertyPath, nested, converter, primitiveTarget, failOnNull, + computedSegment, requiredFetchPaths, listTarget, false, ignored); + } + + DtoPropertyMeta(String dtoFieldName, Kind kind, List sourceGetterPath, List sourcePropertyPath, + DtoBeanMeta nested, DtoConverterMeta converter, boolean primitiveTarget, boolean failOnNull, + boolean computedSegment, List requiredFetchPaths, boolean listTarget, + boolean scalarCollection, boolean ignored) { + this(dtoFieldName, kind, sourceGetterPath, sourcePropertyPath, nested, converter, primitiveTarget, failOnNull, + computedSegment, requiredFetchPaths, listTarget, scalarCollection, false, ignored); + } + + DtoPropertyMeta(String dtoFieldName, Kind kind, List sourceGetterPath, List sourcePropertyPath, + DtoBeanMeta nested, DtoConverterMeta converter, boolean primitiveTarget, boolean failOnNull, + boolean computedSegment, List requiredFetchPaths, boolean listTarget, + boolean scalarCollection, boolean unfetchable, boolean ignored) { this.dtoFieldName = dtoFieldName; this.kind = kind; this.sourceGetterPath = sourceGetterPath; @@ -101,6 +119,8 @@ class DtoPropertyMeta { this.computedSegment = computedSegment; this.requiredFetchPaths = requiredFetchPaths; this.listTarget = listTarget; + this.scalarCollection = scalarCollection; + this.unfetchable = unfetchable; this.ignored = ignored; } @@ -177,6 +197,18 @@ class DtoPropertyMeta { return listTarget || kind == Kind.NESTED_MANY; } + /** + * Return true when the source property is a scalar collection such as an Ebean {@code @DbArray}, + * rather than a to-many association. + */ + boolean isScalarCollection() { + return scalarCollection; + } + + boolean isUnfetchable() { + return unfetchable; + } + /** * {@code true} when this property is marked {@code @DtoIgnore} - permanently excluded from * every mapping (base and every named variant alike), always given its empty default rather @@ -245,4 +277,3 @@ class DtoPropertyMeta { sb.append(')'); } } - diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/ProcessingContext.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/ProcessingContext.java index 6f25d3c2a..89df7fa40 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/ProcessingContext.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/ProcessingContext.java @@ -223,6 +223,15 @@ class ProcessingContext implements Constants { ); } + boolean isTransientField(Element field) { + if (field.getKind() != ElementKind.FIELD) { + return false; + } + VariableElement variable = (VariableElement) field; + return variable.getModifiers().contains(Modifier.TRANSIENT) + || hasAnnotations(variable, "jakarta.persistence.Transient"); + } + private static boolean hasAnnotations(Element element, String... annotations) { return getAnnotation(element, annotations) != null; } @@ -268,17 +277,21 @@ class ProcessingContext implements Constants { /** * Return true if it is a DbJson field. */ - private static boolean dbJsonField(Element field) { + boolean isDbJsonField(Element field) { return hasAnnotations(field, DBJSON, DBJSONB); } /** * Return true if it is a DbArray field. */ - private static boolean dbArrayField(Element field) { + boolean isDbArrayField(Element field) { return hasAnnotations(field, DBARRAY); } + boolean isScalarCollectionField(Element field) { + return isDbArrayField(field) || isDbJsonField(field); + } + private static boolean dbToMany(Element field) { return hasAnnotations(field, ONE_TO_MANY, MANY_TO_MANY); } @@ -417,10 +430,10 @@ class ProcessingContext implements Constants { } boolean toMany = dbToMany(field); - if (dbJsonField(field)) { + if (isDbJsonField(field)) { return propertyTypeMap.getDbJsonType(); } - if (dbArrayField(field)) { + if (isDbArrayField(field)) { // get generic parameter type DeclaredType declaredType = (DeclaredType) field.asType(); TypeMirror arrayElementType = declaredType.getTypeArguments().get(0); diff --git a/querybean-generator/src/test/java/io/ebean/querybean/generator/DtoMapperDbArrayTest.java b/querybean-generator/src/test/java/io/ebean/querybean/generator/DtoMapperDbArrayTest.java new file mode 100644 index 000000000..df753a706 --- /dev/null +++ b/querybean-generator/src/test/java/io/ebean/querybean/generator/DtoMapperDbArrayTest.java @@ -0,0 +1,124 @@ +package io.ebean.querybean.generator; + +import org.junit.jupiter.api.Test; + +import javax.tools.Diagnostic; +import javax.tools.DiagnosticCollector; +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.io.Writer; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class DtoMapperDbArrayTest { + + @Test + void dbArrayList_isSelectedAsScalarColumn() throws IOException { + Path sourceDir = Files.createTempDirectory("dto-db-array-src"); + Path outDir = Files.createTempDirectory("dto-db-array-out"); + Path genSourceDir = Files.createTempDirectory("dto-db-array-gensrc"); + + writeSource(sourceDir, "org.tests.dbarray.ProcessLog", + "package org.tests.dbarray;\n" + + "import io.ebean.annotation.DbArray;\n" + + "import io.ebean.annotation.DbJson;\n" + + "import io.ebean.annotation.DbJsonB;\n" + + "import jakarta.persistence.Transient;\n" + + "public class ProcessLog {\n" + + " @DbArray private java.util.List sourceIds;\n" + + " @DbJson private java.util.List jsonIds;\n" + + " @DbJsonB private java.util.List jsonbIds;\n" + + " @Transient private String computed;\n" + + " public java.util.List sourceIds() { return sourceIds; }\n" + + " public java.util.List jsonIds() { return jsonIds; }\n" + + " public java.util.List jsonbIds() { return jsonbIds; }\n" + + " public String computed() { return computed; }\n" + + "}\n"); + writeSource(sourceDir, "org.tests.dbarray.ProcessLogDto", + "package org.tests.dbarray;\n" + + "public class ProcessLogDto {\n" + + " private final java.util.List sourceIds;\n" + + " private final java.util.List jsonIds;\n" + + " private final java.util.List jsonbIds;\n" + + " private final String computed;\n" + + " public ProcessLogDto(java.util.List sourceIds, java.util.List jsonIds,\n" + + " java.util.List jsonbIds, String computed) {\n" + + " this.sourceIds = sourceIds; this.jsonIds = jsonIds; this.jsonbIds = jsonbIds; this.computed = computed;\n" + + " }\n" + + " public java.util.List getSourceIds() { return sourceIds; }\n" + + " public java.util.List getJsonIds() { return jsonIds; }\n" + + " public java.util.List getJsonbIds() { return jsonbIds; }\n" + + " public String getComputed() { return computed; }\n" + + "}\n"); + writeSource(sourceDir, "org.tests.dbarray.package-info", + "@io.ebean.annotation.DtoMapping(source = ProcessLog.class, target = ProcessLogDto.class)\n" + + "package org.tests.dbarray;\n"); + writeSource(sourceDir, "io.ebean.typequery.Generated", + "package io.ebean.typequery;\n" + + "public @interface Generated { String value(); }\n"); + + DiagnosticCollector diagnostics = new DiagnosticCollector<>(); + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, Locale.getDefault(), null)) { + List sourceFiles; + try (var walk = Files.walk(sourceDir)) { + sourceFiles = walk.filter(path -> path.toString().endsWith(".java")).collect(Collectors.toList()); + } + Iterable compilationUnits = fileManager.getJavaFileObjectsFromPaths(sourceFiles); + List options = List.of( + "-d", outDir.toString(), + "-s", genSourceDir.toString(), + "-classpath", System.getProperty("java.class.path"), + "-processor", Processor.class.getName()); + + JavaCompiler.CompilationTask task = compiler.getTask( + null, fileManager, diagnostics, options, null, compilationUnits); + assertTrue(task.call(), "compilation failed: " + errors(diagnostics)); + + Path mapperFile; + try (var walk = Files.walk(genSourceDir)) { + mapperFile = walk.filter(path -> path.getFileName().toString().equals("ProcessLogDtoMapper.java")) + .findFirst() + .orElseThrow(() -> new AssertionError("generated mapper source not found")); + } + String generated = Files.readString(mapperFile); + assertTrue(generated.contains("select(\"sourceIds,jsonIds,jsonbIds\")"), generated); + assertTrue(generated.contains("source.sourceIds()"), generated); + assertTrue(generated.contains("source.jsonIds()"), generated); + assertTrue(generated.contains("source.jsonbIds()"), generated); + assertTrue(generated.contains("source.computed()"), generated); + assertTrue(!generated.contains("fetch(\"sourceIds\")"), generated); + assertTrue(!generated.contains("fetch(\"jsonIds\")"), generated); + assertTrue(!generated.contains("fetch(\"jsonbIds\")"), generated); + } + } + + private List errors(DiagnosticCollector diagnostics) { + return diagnostics.getDiagnostics().stream() + .filter(diagnostic -> diagnostic.getKind() == Diagnostic.Kind.ERROR) + .map(diagnostic -> diagnostic.getMessage(Locale.getDefault())) + .collect(Collectors.toList()); + } + + private void writeSource(Path sourceDir, String fqn, String content) { + try { + Path packageDir = sourceDir.resolve(fqn.substring(0, fqn.lastIndexOf('.')).replace('.', '/')); + Files.createDirectories(packageDir); + String simpleName = fqn.substring(fqn.lastIndexOf('.') + 1); + try (Writer writer = Files.newBufferedWriter(packageDir.resolve(simpleName + ".java"))) { + writer.write(content); + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} From e4bdec0fda811759e268085b00c7bf421ebee0fb Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sat, 19 Sep 2026 21:27:59 +1200 Subject: [PATCH 7/8] Postgis: Add GraalVM native image reflect-config.json for org.postgis.DriverWrapperLW etc (#3887) This is handy when compiling to native image with GraalVM and using Postgis and DriverWrapperLW Adds the PGbox2d, PGbox3d, PGgeography, PGgeographyLW, PGgeometry, PGgeometryLW Co-authored-by: robin.bygrave --- .../ebean-platform-postgres/reflect-config.json | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json b/platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json index 9a042678a..3d4f2e4e2 100644 --- a/platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json +++ b/platforms/postgres/src/main/resources/META-INF/native-image/io.ebean/ebean-platform-postgres/reflect-config.json @@ -1,5 +1,11 @@ [ - {"name": "org.postgis.DriverWrapperLW", "allDeclaredConstructors": true, "allDeclaredFields": true}, - {"name": "org.postgis.DriverWrapper", "allDeclaredConstructors": true, "allDeclaredFields": true}, - {"name": "org.postgis.DriverWrapper$TypesAdder80", "allDeclaredConstructors": true, "allDeclaredFields": true} + {"name": "org.postgis.DriverWrapperLW", "allDeclaredConstructors": true}, + {"name": "org.postgis.DriverWrapper", "allDeclaredConstructors": true}, + {"name": "org.postgis.DriverWrapper$TypesAdder80", "allDeclaredConstructors": true}, + {"name": "org.postgis.PGbox2d", "allDeclaredConstructors": true}, + {"name": "org.postgis.PGbox3d", "allDeclaredConstructors": true}, + {"name": "org.postgis.PGgeography", "allDeclaredConstructors": true}, + {"name": "org.postgis.PGgeographyLW", "allDeclaredConstructors": true}, + {"name": "org.postgis.PGgeometry", "allDeclaredConstructors": true}, + {"name": "org.postgis.PGgeometryLW", "allDeclaredConstructors": true} ] From 2b92e417df82b2e45ba9ae3351197ed8584f410f Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 21 Sep 2026 19:52:06 +1200 Subject: [PATCH 8/8] Version 18.6.0 --- composites/ebean-clickhouse/pom.xml | 10 ++--- composites/ebean-cockroach/pom.xml | 10 ++--- composites/ebean-db2/pom.xml | 10 ++--- composites/ebean-h2/pom.xml | 10 ++--- composites/ebean-hana/pom.xml | 10 ++--- composites/ebean-mariadb/pom.xml | 10 ++--- composites/ebean-mysql/pom.xml | 10 ++--- composites/ebean-net-postgis/pom.xml | 12 +++--- composites/ebean-nuodb/pom.xml | 10 ++--- composites/ebean-oracle/pom.xml | 10 ++--- composites/ebean-pgvector/pom.xml | 12 +++--- composites/ebean-postgis/pom.xml | 12 +++--- composites/ebean-postgres/pom.xml | 10 ++--- composites/ebean-sqlite/pom.xml | 10 ++--- composites/ebean-sqlserver/pom.xml | 10 ++--- composites/ebean-yugabyte/pom.xml | 10 ++--- composites/ebean/pom.xml | 12 +++--- composites/pom.xml | 2 +- ebean-api/pom.xml | 2 +- ebean-avajejsonb-mapper/pom.xml | 10 ++--- ebean-bench/pom.xml | 2 +- ebean-bom/pom.xml | 58 ++++++++++++++-------------- ebean-core-json/pom.xml | 4 +- ebean-core-type/pom.xml | 4 +- ebean-core/pom.xml | 14 +++---- ebean-ddl-generator/pom.xml | 8 ++-- ebean-jackson-mapper/pom.xml | 4 +- ebean-net-postgis-types/pom.xml | 8 ++-- ebean-opentelemetry/pom.xml | 10 ++--- ebean-pgvector-types/pom.xml | 8 ++-- ebean-postgis-types/pom.xml | 8 ++-- ebean-querybean/pom.xml | 10 ++--- ebean-redis/pom.xml | 12 +++--- ebean-redisson/pom.xml | 12 +++--- ebean-spring-txn/pom.xml | 6 +-- ebean-test/pom.xml | 12 +++--- howto-deploy-to-central.md | 4 +- kotlin-querybean-generator/pom.xml | 10 ++--- platforms/all/pom.xml | 28 +++++++------- platforms/clickhouse/pom.xml | 4 +- platforms/db2/pom.xml | 4 +- platforms/h2/pom.xml | 4 +- platforms/hana/pom.xml | 4 +- platforms/hsqldb/pom.xml | 4 +- platforms/mariadb/pom.xml | 6 +-- platforms/mysql/pom.xml | 4 +- platforms/nuodb/pom.xml | 4 +- platforms/oracle/pom.xml | 4 +- platforms/pom.xml | 2 +- platforms/postgres/pom.xml | 4 +- platforms/sqlanywhere/pom.xml | 4 +- platforms/sqlite/pom.xml | 4 +- platforms/sqlserver/pom.xml | 4 +- pom.xml | 2 +- querybean-generator/pom.xml | 4 +- tests/pom.xml | 2 +- tests/test-kotlin/pom.xml | 6 +-- 57 files changed, 242 insertions(+), 242 deletions(-) diff --git a/composites/ebean-clickhouse/pom.xml b/composites/ebean-clickhouse/pom.xml index ddbd3ee11..42904532e 100644 --- a/composites/ebean-clickhouse/pom.xml +++ b/composites/ebean-clickhouse/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-clickhouse - 18.5.0 + 18.6.0 diff --git a/composites/ebean-cockroach/pom.xml b/composites/ebean-cockroach/pom.xml index 5abf59d6a..9db3df9ca 100644 --- a/composites/ebean-cockroach/pom.xml +++ b/composites/ebean-cockroach/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 diff --git a/composites/ebean-db2/pom.xml b/composites/ebean-db2/pom.xml index 680cd3253..b927dfa65 100644 --- a/composites/ebean-db2/pom.xml +++ b/composites/ebean-db2/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-db2 - 18.5.0 + 18.6.0 diff --git a/composites/ebean-h2/pom.xml b/composites/ebean-h2/pom.xml index ce1e41452..b7fb4adf9 100644 --- a/composites/ebean-h2/pom.xml +++ b/composites/ebean-h2/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-h2 - 18.5.0 + 18.6.0 diff --git a/composites/ebean-hana/pom.xml b/composites/ebean-hana/pom.xml index fc879d6e9..fe43ebbbc 100644 --- a/composites/ebean-hana/pom.xml +++ b/composites/ebean-hana/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-hana - 18.5.0 + 18.6.0 diff --git a/composites/ebean-mariadb/pom.xml b/composites/ebean-mariadb/pom.xml index 5cd8a263b..6c95b4bf3 100644 --- a/composites/ebean-mariadb/pom.xml +++ b/composites/ebean-mariadb/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-mariadb - 18.5.0 + 18.6.0 diff --git a/composites/ebean-mysql/pom.xml b/composites/ebean-mysql/pom.xml index 2b4ba93b3..5b0ef59a0 100644 --- a/composites/ebean-mysql/pom.xml +++ b/composites/ebean-mysql/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-mysql - 18.5.0 + 18.6.0 diff --git a/composites/ebean-net-postgis/pom.xml b/composites/ebean-net-postgis/pom.xml index 4ed0ea445..32a22b3ba 100644 --- a/composites/ebean-net-postgis/pom.xml +++ b/composites/ebean-net-postgis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -22,13 +22,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -47,19 +47,19 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 io.ebean ebean-net-postgis-types - 18.5.0 + 18.6.0 diff --git a/composites/ebean-nuodb/pom.xml b/composites/ebean-nuodb/pom.xml index 8540b7dc7..75ea19324 100644 --- a/composites/ebean-nuodb/pom.xml +++ b/composites/ebean-nuodb/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-nuodb - 18.5.0 + 18.6.0 diff --git a/composites/ebean-oracle/pom.xml b/composites/ebean-oracle/pom.xml index 1d267d745..2ea499eee 100644 --- a/composites/ebean-oracle/pom.xml +++ b/composites/ebean-oracle/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-oracle - 18.5.0 + 18.6.0 diff --git a/composites/ebean-pgvector/pom.xml b/composites/ebean-pgvector/pom.xml index 19b6059fc..115b8778e 100644 --- a/composites/ebean-pgvector/pom.xml +++ b/composites/ebean-pgvector/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -22,13 +22,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -47,19 +47,19 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 io.ebean ebean-pgvector-types - 18.5.0 + 18.6.0 diff --git a/composites/ebean-postgis/pom.xml b/composites/ebean-postgis/pom.xml index 9826dea1f..1fc50cbea 100644 --- a/composites/ebean-postgis/pom.xml +++ b/composites/ebean-postgis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -22,13 +22,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -47,19 +47,19 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 io.ebean ebean-postgis-types - 18.5.0 + 18.6.0 diff --git a/composites/ebean-postgres/pom.xml b/composites/ebean-postgres/pom.xml index d7ed30727..2fcb4139f 100644 --- a/composites/ebean-postgres/pom.xml +++ b/composites/ebean-postgres/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 diff --git a/composites/ebean-sqlite/pom.xml b/composites/ebean-sqlite/pom.xml index 52c79b729..22e9f3fde 100644 --- a/composites/ebean-sqlite/pom.xml +++ b/composites/ebean-sqlite/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-sqlite - 18.5.0 + 18.6.0 diff --git a/composites/ebean-sqlserver/pom.xml b/composites/ebean-sqlserver/pom.xml index 42c199a0b..899f9b4c4 100644 --- a/composites/ebean-sqlserver/pom.xml +++ b/composites/ebean-sqlserver/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-sqlserver - 18.5.0 + 18.6.0 diff --git a/composites/ebean-yugabyte/pom.xml b/composites/ebean-yugabyte/pom.xml index ce814ec3d..72db5f542 100644 --- a/composites/ebean-yugabyte/pom.xml +++ b/composites/ebean-yugabyte/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -42,13 +42,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 diff --git a/composites/ebean/pom.xml b/composites/ebean/pom.xml index fba680df0..69030c01d 100644 --- a/composites/ebean/pom.xml +++ b/composites/ebean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -17,13 +17,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 @@ -41,7 +41,7 @@ io.ebean ebean-jackson-mapper - 18.5.0 + 18.6.0 @@ -60,13 +60,13 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean ebean-platform-all - 18.5.0 + 18.6.0 diff --git a/composites/pom.xml b/composites/pom.xml index ba2a4f9db..84ca6b42d 100644 --- a/composites/pom.xml +++ b/composites/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 composites diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml index 83d0efe23..37e15f974 100644 --- a/ebean-api/pom.xml +++ b/ebean-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean api diff --git a/ebean-avajejsonb-mapper/pom.xml b/ebean-avajejsonb-mapper/pom.xml index 38c32e540..6b1a82480 100644 --- a/ebean-avajejsonb-mapper/pom.xml +++ b/ebean-avajejsonb-mapper/pom.xml @@ -3,7 +3,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 4.0.0 @@ -14,7 +14,7 @@ io.ebean ebean-core-type - 18.5.0 + 18.6.0 provided @@ -41,14 +41,14 @@ io.ebean ebean-core - 18.5.0 + 18.6.0 test io.ebean ebean-platform-h2 - 18.5.0 + 18.6.0 test @@ -69,7 +69,7 @@ io.ebean ebean-ddl-generator - 18.5.0 + 18.6.0 test diff --git a/ebean-bench/pom.xml b/ebean-bench/pom.xml index 3d4a1a87d..da25d7609 100644 --- a/ebean-bench/pom.xml +++ b/ebean-bench/pom.xml @@ -6,7 +6,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean-bench diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml index 7829f0fdc..62aad3d2f 100644 --- a/ebean-bom/pom.xml +++ b/ebean-bom/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean bom @@ -89,25 +89,25 @@ io.ebean ebean - 18.5.0 + 18.6.0 io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 io.ebean ebean-core-type - 18.5.0 + 18.6.0 @@ -125,19 +125,19 @@ io.ebean ebean-jackson-mapper - 18.5.0 + 18.6.0 io.ebean ebean-avajejsonb-mapper - 18.5.0 + 18.6.0 io.ebean ebean-ddl-generator - 18.5.0 + 18.6.0 @@ -161,37 +161,37 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 io.ebean querybean-generator - 18.5.0 + 18.6.0 io.ebean kotlin-querybean-generator - 18.5.0 + 18.6.0 io.ebean ebean-test - 18.5.0 + 18.6.0 io.ebean ebean-redis - 18.5.0 + 18.6.0 io.ebean ebean-spring-txn - 18.5.0 + 18.6.0 @@ -199,91 +199,91 @@ io.ebean ebean-clickhouse - 18.5.0 + 18.6.0 io.ebean ebean-db2 - 18.5.0 + 18.6.0 io.ebean ebean-h2 - 18.5.0 + 18.6.0 io.ebean ebean-hana - 18.5.0 + 18.6.0 io.ebean ebean-mariadb - 18.5.0 + 18.6.0 io.ebean ebean-mysql - 18.5.0 + 18.6.0 io.ebean ebean-nuodb - 18.5.0 + 18.6.0 io.ebean ebean-oracle - 18.5.0 + 18.6.0 io.ebean ebean-postgres - 18.5.0 + 18.6.0 io.ebean ebean-postgis - 18.5.0 + 18.6.0 io.ebean ebean-postgis-types - 18.5.0 + 18.6.0 io.ebean ebean-pgvector - 18.5.0 + 18.6.0 io.ebean ebean-pgvector-types - 18.5.0 + 18.6.0 io.ebean ebean-sqlite - 18.5.0 + 18.6.0 io.ebean ebean-sqlserver - 18.5.0 + 18.6.0 diff --git a/ebean-core-json/pom.xml b/ebean-core-json/pom.xml index 52fbb93bf..b578493ea 100644 --- a/ebean-core-json/pom.xml +++ b/ebean-core-json/pom.xml @@ -3,7 +3,7 @@ io.ebean ebean-parent - 18.5.0 + 18.6.0 ebean-core-json ebean-core-json @@ -16,7 +16,7 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml index 8af043c0b..7285000cc 100644 --- a/ebean-core-type/pom.xml +++ b/ebean-core-type/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean-core-type @@ -16,7 +16,7 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index 29239e023..dccc5ecc7 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -3,7 +3,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean-core @@ -22,13 +22,13 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 io.ebean ebean-core-json - 18.5.0 + 18.6.0 @@ -52,7 +52,7 @@ io.ebean ebean-core-type - 18.5.0 + 18.6.0 @@ -157,21 +157,21 @@ io.ebean ebean-platform-h2 - 18.5.0 + 18.6.0 test io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 test io.ebean ebean-platform-sqlserver - 18.5.0 + 18.6.0 test diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index e8a1b287c..d2ced101f 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean ddl generation @@ -28,14 +28,14 @@ io.ebean ebean-core-type - 18.5.0 + 18.6.0 provided io.ebean ebean-core - 18.5.0 + 18.6.0 provided @@ -65,7 +65,7 @@ io.ebean ebean-platform-all - 18.5.0 + 18.6.0 test diff --git a/ebean-jackson-mapper/pom.xml b/ebean-jackson-mapper/pom.xml index 043a9b3e6..a61885d90 100644 --- a/ebean-jackson-mapper/pom.xml +++ b/ebean-jackson-mapper/pom.xml @@ -3,7 +3,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 4.0.0 @@ -15,7 +15,7 @@ io.ebean ebean-core-type - 18.5.0 + 18.6.0 provided diff --git a/ebean-net-postgis-types/pom.xml b/ebean-net-postgis-types/pom.xml index 787c7b6e9..c72ffee61 100644 --- a/ebean-net-postgis-types/pom.xml +++ b/ebean-net-postgis-types/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean net postgis types @@ -19,14 +19,14 @@ io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 provided @@ -54,7 +54,7 @@ io.ebean ebean-test - 18.5.0 + 18.6.0 test diff --git a/ebean-opentelemetry/pom.xml b/ebean-opentelemetry/pom.xml index d3af28658..a08d1dfc0 100644 --- a/ebean-opentelemetry/pom.xml +++ b/ebean-opentelemetry/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean-opentelemetry @@ -28,7 +28,7 @@ io.ebean ebean-core - 18.5.0 + 18.6.0 provided @@ -71,21 +71,21 @@ io.ebean ebean-test - 18.5.0 + 18.6.0 test io.ebean ebean-querybean - 18.5.0 + 18.6.0 test io.ebean querybean-generator - 18.5.0 + 18.6.0 provided diff --git a/ebean-pgvector-types/pom.xml b/ebean-pgvector-types/pom.xml index e2d4f151a..26fcf78af 100644 --- a/ebean-pgvector-types/pom.xml +++ b/ebean-pgvector-types/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean pgvector types @@ -19,14 +19,14 @@ io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 provided @@ -54,7 +54,7 @@ io.ebean ebean-test - 18.5.0 + 18.6.0 test diff --git a/ebean-postgis-types/pom.xml b/ebean-postgis-types/pom.xml index 50228aae6..2c87eee0c 100644 --- a/ebean-postgis-types/pom.xml +++ b/ebean-postgis-types/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean postgis types @@ -19,14 +19,14 @@ io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 provided @@ -62,7 +62,7 @@ io.ebean ebean-test - 18.5.0 + 18.6.0 test diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml index 0b92883d7..d2fc90691 100644 --- a/ebean-querybean/pom.xml +++ b/ebean-querybean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean querybean @@ -17,7 +17,7 @@ io.ebean ebean-core - 18.5.0 + 18.6.0 provided @@ -59,14 +59,14 @@ io.ebean ebean-ddl-generator - 18.5.0 + 18.6.0 test io.ebean ebean-test - 18.5.0 + 18.6.0 test @@ -80,7 +80,7 @@ io.ebean querybean-generator - 18.5.0 + 18.6.0 provided diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml index 0454c9c6e..bf8e40a0d 100644 --- a/ebean-redis/pom.xml +++ b/ebean-redis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean-redis @@ -29,35 +29,35 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 provided io.ebean ebean-core - 18.5.0 + 18.6.0 provided io.ebean ebean-querybean - 18.5.0 + 18.6.0 test io.ebean ebean-test - 18.5.0 + 18.6.0 test io.ebean querybean-generator - 18.5.0 + 18.6.0 provided diff --git a/ebean-redisson/pom.xml b/ebean-redisson/pom.xml index 95de61bf7..9440bebf3 100644 --- a/ebean-redisson/pom.xml +++ b/ebean-redisson/pom.xml @@ -6,7 +6,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean-redisson @@ -29,35 +29,35 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 provided io.ebean ebean-core - 18.5.0 + 18.6.0 provided io.ebean ebean-querybean - 18.5.0 + 18.6.0 test io.ebean ebean-test - 18.5.0 + 18.6.0 test io.ebean querybean-generator - 18.5.0 + 18.6.0 provided diff --git a/ebean-spring-txn/pom.xml b/ebean-spring-txn/pom.xml index 83b79ba65..177ed36dc 100644 --- a/ebean-spring-txn/pom.xml +++ b/ebean-spring-txn/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean-spring-txn @@ -28,7 +28,7 @@ io.ebean ebean-core - 18.5.0 + 18.6.0 provided @@ -77,7 +77,7 @@ io.ebean ebean-test - 18.5.0 + 18.6.0 test diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 01ef0f77a..382a9f3de 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ebean test @@ -33,20 +33,20 @@ io.ebean ebean-platform-h2 - 18.5.0 + 18.6.0 io.ebean ebean-core - 18.5.0 + 18.6.0 provided io.ebean ebean-ddl-generator - 18.5.0 + 18.6.0 @@ -149,14 +149,14 @@ io.ebean ebean-jackson-mapper - 18.5.0 + 18.6.0 test io.ebean ebean-platform-all - 18.5.0 + 18.6.0 test diff --git a/howto-deploy-to-central.md b/howto-deploy-to-central.md index 5c9ca327f..80e3739c7 100644 --- a/howto-deploy-to-central.md +++ b/howto-deploy-to-central.md @@ -15,8 +15,8 @@ mvn -T 4 clean package mvn -T 4 deploy -pl '!composites,!platforms' -Pcentral -DskipTests ## git commit, git tag, git push --tags -git commit -am 'Version 18.5.0' -git tag 18.5.0 +git commit -am 'Version 18.6.0' +git tag 18.6.0 git push --tags ### convert to javax diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml index 13ef1c2f1..c33552600 100644 --- a/kotlin-querybean-generator/pom.xml +++ b/kotlin-querybean-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 kotlin querybean generator @@ -21,7 +21,7 @@ io.ebean ebean-querybean - 18.5.0 + 18.6.0 test @@ -35,7 +35,7 @@ io.ebean ebean-core - 18.5.0 + 18.6.0 test @@ -56,14 +56,14 @@ io.ebean ebean-platform-h2 - 18.5.0 + 18.6.0 test io.ebean ebean-ddl-generator - 18.5.0 + 18.6.0 test diff --git a/platforms/all/pom.xml b/platforms/all/pom.xml index 1b07a4c48..06a9d4416 100644 --- a/platforms/all/pom.xml +++ b/platforms/all/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -16,67 +16,67 @@ io.ebean ebean-platform-h2 - 18.5.0 + 18.6.0 io.ebean ebean-platform-clickhouse - 18.5.0 + 18.6.0 io.ebean ebean-platform-db2 - 18.5.0 + 18.6.0 io.ebean ebean-platform-hana - 18.5.0 + 18.6.0 io.ebean ebean-platform-hsqldb - 18.5.0 + 18.6.0 io.ebean ebean-platform-mysql - 18.5.0 + 18.6.0 io.ebean ebean-platform-mariadb - 18.5.0 + 18.6.0 io.ebean ebean-platform-nuodb - 18.5.0 + 18.6.0 io.ebean ebean-platform-oracle - 18.5.0 + 18.6.0 io.ebean ebean-platform-postgres - 18.5.0 + 18.6.0 io.ebean ebean-platform-sqlanywhere - 18.5.0 + 18.6.0 io.ebean ebean-platform-sqlite - 18.5.0 + 18.6.0 io.ebean ebean-platform-sqlserver - 18.5.0 + 18.6.0 diff --git a/platforms/clickhouse/pom.xml b/platforms/clickhouse/pom.xml index 4226aa976..1a0da3880 100644 --- a/platforms/clickhouse/pom.xml +++ b/platforms/clickhouse/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -16,7 +16,7 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 diff --git a/platforms/db2/pom.xml b/platforms/db2/pom.xml index ee9f4af21..b20ad202d 100644 --- a/platforms/db2/pom.xml +++ b/platforms/db2/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -16,7 +16,7 @@ io.ebean ebean-api - 18.5.0 + 18.6.0 diff --git a/platforms/h2/pom.xml b/platforms/h2/pom.xml index 96f4edc10..d4cd425dd 100644 --- a/platforms/h2/pom.xml +++ b/platforms/h2/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 18.5.0 + 18.6.0 ../.. @@ -16,7 +16,7 @@ io.ebean ebean-api - 18.5.0 + 18.6.0