Compare commits

..
35 Commits
Author SHA1 Message Date
Rob Bygrave cc3b9c9508 Version 13.15.1 2023-03-21 21:17:08 +13:00
Rob Bygrave be49be38d0 Bump ebean-agent to 13.15.1 2023-03-21 20:45:59 +13:00
Rob BygraveandGitHub dca13db945 Merge pull request #3002 from ebean-orm/feature/improveLogging-markedAsDeleted
Improve the logging around MarkedAsDeleted
2023-03-21 20:43:12 +13:00
Rob Bygrave bd318a5d85 Improve the logging around MarkedAsDeleted 2023-03-21 20:30:39 +13:00
Rob BygraveandGitHub 4c2be2986a Merge pull request #3000 from FOCONIS/bugfix-fix-json-import
FIX: DB.json().toBean(target) can update existing lists (#85)
2023-03-18 10:22:18 +13:00
3d7bebd244 FIX: DB.json().toBean(target) can update existing lists (#85)
* FIX: DB.json().toBean(target) can update existing lists

* remove sys.print, typo

---------

Co-authored-by: Roland Praml <roland.praml@foconis.de>
Co-authored-by: Juri Skrobko <juri.skrobko@foconis.de>
2023-03-17 11:04:53 +01:00
Rob Bygrave e23bbf5f94 Revert test sqlserver docker image to 2017-CU28-ubuntu-16.04 2023-03-17 19:18:53 +13:00
Rob Bygrave 27b0c33a4b Adjustments for SqlServer using BIGINT 2023-03-17 18:51:33 +13:00
Rob Bygrave 53ef159d06 Bump Postgres docker image to 15 2023-03-17 18:50:52 +13:00
Rob Bygrave a7d778d98b Merge branch 'master' of github.com:ebean-orm/ebean 2023-03-17 18:14:17 +13:00
Rob Bygrave 19580ff83d Bump SqlServer docker image to 2022-RTM-CU2-ubuntu-20.04 2023-03-17 18:14:02 +13:00
Rob BygraveandGitHub a79a44c513 Merge pull request #2999 from ebean-orm/feature/2998-sqlserver-bigint
#2998 - SQLServer, map java long to BIGINT for bitwise expressions
2023-03-17 18:04:32 +13:00
Rob Bygrave 184b82e1b2 Fix test TestRawSqlQuerySelect for SqlServer
The order by not supported here by SqlServer
2023-03-17 18:03:37 +13:00
Rob Bygrave 04e935acd0 #2998 - SQLServer, map java long to BIGINT for bitwise expressions 2023-03-17 17:54:25 +13:00
Rob Bygrave 142ffe925c Fix test TestRawSqlQuerySelect to support multiple databases 2023-03-16 09:06:09 +13:00
Rob Bygrave 395505ec0d Bump to 13.15.1-SNAPSHOT 2023-03-14 16:57:17 +13:00
Rob Bygrave c21a76fa5b Version 13.15.0 2023-03-14 12:54:53 +13:00
Rob Bygrave a2690fdccd #2995 - Change DatabaseConfig.getClasses() to return a Set
The thinking is that it is safer to make this API change
rather than to return a shallow copy which you won't be
able to detect.
2023-03-14 11:56:01 +13:00
Rob BygraveandGitHub 4039c20462 Merge pull request #2996 from ebean-orm/buchtajz-query_select_bugs
Add support for specifying select clause with RawSql
2023-03-14 11:48:40 +13:00
Rob BygraveandGitHub 6d43028fba Merge pull request #2995 from ebean-orm/feature/config-isLoadModuleInfo
Change such that querybean generated class registration can be used with explicit class registration
2023-03-14 11:48:09 +13:00
Rob Bygrave efcee7e739 Improve test asserts for lazy loading element collection 2023-03-10 21:33:58 +13:00
Rob Bygrave 523fe6ae54 #2946 - Support specify select clause for RawSql 2023-03-10 20:31:54 +13:00
Rob Bygrave 8ec031bfde Merge branch 'query_select_bugs' of github.com:buchtajz/ebean into buchtajz-query_select_bugs 2023-03-10 19:38:26 +13:00
Rob Bygrave cd938fd659 Bump github actions versions on all build.yml 2023-03-10 14:17:38 +13:00
Rob Bygrave 837e296451 Bump github actions versions on build.yml 2023-03-10 14:14:31 +13:00
Rob Bygrave 52b0bd7b7d Bump kotlin version to 1.8.10 2023-03-10 13:57:14 +13:00
Rob Bygrave a8cad4f3d9 Change such that querybean generated class registration can be used will explicit class registration
In DatabaseConfig.isAutoLoadModuleInfo() it only used the querybean generated class registration is classes.isEmpty(). Changing this so that it only uses the loadModuleInfo flag.

This means, unless loadModuleInfo is set to false the classes that register with ebean will be a combination of both the explicitly registered ones plus the classes from the querybean generated EbeanEntityRegister.

In addition, this changes the classes from List to Set.
2023-03-10 11:01:46 +13:00
Rob Bygrave e4cb81cbba Bump to 13.14.2-SNAPSHOT 2023-03-10 00:26:34 +13:00
Rob Bygrave 08cd0aa4b7 Fix the jakarta <-> javax scripts with space after sed -i 2023-03-10 00:22:13 +13:00
buchtajzandGitHub 8c47ba89d1 Merge branch 'ebean-orm:master' into query_select_bugs 2023-02-21 00:04:39 +01:00
Michal Buchtík 1af3d0bcf3 remove unnecessary replace 2023-02-10 12:27:10 +01:00
Michal Buchtík 01a0cee3c2 patch RawSql query builder, fix tests 2023-02-10 12:17:40 +01:00
Michal Buchtík f26feec3d9 Merge remote-tracking branch 'origin/master' into query_select_bugs 2023-02-10 09:33:28 +01:00
Michal Buchtík 6055a33dc8 fix changes 2023-01-27 12:11:01 +01:00
Michal Buchtík 230d18e48f failing test for rawSql select .asDto query 2023-01-27 11:39:37 +01:00
119 changed files with 866 additions and 506 deletions
+3 -3
View File
@@ -17,14 +17,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'zulu'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'zulu'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+2 -2
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: oracle-actions/setup-java@v1
with:
website: jdk.java.net
release: ${{ matrix.java_version }}
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -17,14 +17,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'zulu'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'zulu'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -17,14 +17,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+3 -3
View File
@@ -20,14 +20,14 @@ jobs:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Maven cache
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: maven-cache
with:
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-clickhouse</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-clickhouse</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-cockroach</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-db2</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-db2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-h2</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-hana</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hana</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-mariadb</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mariadb</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-mysql</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mysql</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-nuodb</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-nuodb</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-oracle</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-oracle</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-postgres</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-sqlite</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlite</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-sqlserver</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean-yugabyte</name>
@@ -16,13 +16,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -35,13 +35,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+8 -8
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>composites</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean (all platforms)</name>
@@ -16,31 +16,31 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-joda-time</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-jsonnode</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -53,13 +53,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>composites</artifactId>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean api</name>
@@ -24,6 +24,11 @@ public class InterceptReadOnly implements EntityBeanIntercept {
this.owner = (EntityBean) ownerBean;
}
@Override
public String toString() {
return "InterceptReadOnly{" + owner + '}';
}
@Override
public EntityBean getOwner() {
return owner;
@@ -113,6 +113,25 @@ public final class InterceptReadWrite implements EntityBeanIntercept {
this.flags = null;
}
@Override
public String toString() {
return "InterceptReadWrite{state=" + state +
(dirty ? " dirty;" : "") +
(forceUpdate ? " forceUpdate;" : "") +
(readOnly ? " readOnly;" : "") +
(disableLazyLoad ? " disableLazyLoad;" : "") +
(lazyLoadFailure ? " lazyLoadFailure;" : "") +
(fullyLoadedBean ? " fullyLoadedBean;" : "") +
(loadedFromCache ? " loadedFromCache;" : "") +
", pc=" + System.identityHashCode(persistenceContext) +
", flags=" + Arrays.toString(flags) +
(lazyLoadProperty > -1 ? (", lazyLoadProperty=" + lazyLoadProperty) : "") +
", loader=" + beanLoader +
(ownerId != null ? (", ownerId=" + ownerId) : "") +
", owner=" + owner +
'}';
}
@Override
public EntityBean getOwner() {
return owner;
@@ -718,7 +737,7 @@ public final class InterceptReadWrite implements EntityBeanIntercept {
}
if (lazyLoadFailure) {
// failed when batch lazy loaded by another bean in the batch
throw new EntityNotFoundException("(Lazy) loading failed on type:" + owner.getClass().getName() + " id:" + ownerId + " - Bean has been deleted");
throw new EntityNotFoundException("(Lazy) loading failed on type:" + owner.getClass().getName() + " id:" + ownerId + " - Bean has been deleted. BeanLoader: " + beanLoader);
}
if (lazyLoadProperty == -1) {
lazyLoadProperty = loadProperty;
@@ -123,10 +123,10 @@ public class DatabaseConfig {
private boolean loadModuleInfo = true;
/**
* List of interesting classes such as entities, embedded, ScalarTypes,
* Listeners, Finders, Controllers etc.
* Interesting classes such as entities, embedded, ScalarTypes,
* Listeners, Finders, Controllers, AttributeConverters etc.
*/
private List<Class<?>> classes = new ArrayList<>();
private Set<Class<?>> classes = new HashSet<>();
/**
* The packages that are searched for interesting classes. Only used when
@@ -2320,8 +2320,7 @@ public class DatabaseConfig {
}
/**
* Programmatically add classes (typically entities) that this server should
* use.
* Programmatically add classes (typically entities) that this server should use.
* <p>
* The class can be an Entity, Embedded type, ScalarType, BeanPersistListener,
* BeanFinder or BeanPersistController.
@@ -2331,8 +2330,7 @@ public class DatabaseConfig {
* <p>
* Alternatively the classes can be added via {@link #setClasses(List)}.
*
* @param cls the entity type (or other type) that should be registered by this
* database.
* @param cls the entity type (or other type) that should be registered by this database.
*/
public void addClass(Class<?> cls) {
classes.add(cls);
@@ -2341,7 +2339,7 @@ public class DatabaseConfig {
/**
* Register all the classes (typically entity classes).
*/
public void addAll(List<Class<?>> classList) {
public void addAll(Collection<Class<?>> classList) {
if (classList != null && !classList.isEmpty()) {
classes.addAll(classList);
}
@@ -2383,15 +2381,26 @@ public class DatabaseConfig {
* <p>
* Alternatively the classes can contain added via {@link #addClass(Class)}.
*/
public void setClasses(List<Class<?>> classes) {
this.classes = classes;
public void setClasses(Collection<Class<?>> classes) {
this.classes = new HashSet<>(classes);
}
/**
* Return the classes registered for this database. Typically this includes
* Return the classes registered for this database. Typically, this includes
* entities and perhaps listeners.
*/
public List<Class<?>> getClasses() {
public Set<Class<?>> classes() {
return classes;
}
/**
* Deprecated - migrate to classes().
* <p>
* Sorry if returning Set rather than List breaks code but it feels safer to
* do that than a subtle change to return a shallow copy which you will not detect.
*/
@Deprecated
public Set<Class<?>> getClasses() {
return classes;
}
@@ -2760,8 +2769,6 @@ public class DatabaseConfig {
this.classLoadConfig = classLoadConfig;
}
/**
* Load settings from application.properties, application.yaml and other sources.
* <p>
@@ -2906,7 +2913,7 @@ public class DatabaseConfig {
serverCachePlugin = p.createInstance(ServerCachePlugin.class, "serverCachePlugin", serverCachePlugin);
String packagesProp = p.get("search.packages", p.get("packages", null));
packages = getSearchList(packagesProp, packages);
packages = searchList(packagesProp, packages);
skipCacheAfterWrite = p.getBoolean("skipCacheAfterWrite", skipCacheAfterWrite);
updateAllPropertiesInBatch = p.getBoolean("updateAllPropertiesInBatch", updateAllPropertiesInBatch);
@@ -2982,10 +2989,10 @@ public class DatabaseConfig {
tenantCatalogProvider = p.createInstance(TenantCatalogProvider.class, "tenant.catalogProvider", tenantCatalogProvider);
tenantSchemaProvider = p.createInstance(TenantSchemaProvider.class, "tenant.schemaProvider", tenantSchemaProvider);
tenantPartitionColumn = p.get("tenant.partitionColumn", tenantPartitionColumn);
classes = getClasses(p);
classes = readClasses(p);
String mappingsProp = p.get("mappingLocations", null);
mappingLocations = getSearchList(mappingsProp, mappingLocations);
mappingLocations = searchList(mappingsProp, mappingLocations);
}
private NamingConvention createNamingConvention(PropertiesWrapper properties, NamingConvention namingConvention) {
@@ -2999,13 +3006,13 @@ public class DatabaseConfig {
* @param properties the properties
* @return the classes
*/
private List<Class<?>> getClasses(PropertiesWrapper properties) {
private Set<Class<?>> readClasses(PropertiesWrapper properties) {
String classNames = properties.get("classes", null);
if (classNames == null) {
return classes;
}
List<Class<?>> classList = new ArrayList<>();
Set<Class<?>> classList = new HashSet<>();
String[] split = StringHelper.splitNames(classNames);
for (String cn : split) {
if (!"class".equalsIgnoreCase(cn)) {
@@ -3020,7 +3027,7 @@ public class DatabaseConfig {
return classList;
}
private List<String> getSearchList(String searchNames, List<String> defaultValue) {
private List<String> searchList(String searchNames, List<String> defaultValue) {
if (searchNames != null) {
String[] entries = StringHelper.splitNames(searchNames);
List<String> hitList = new ArrayList<>(entries.length);
@@ -3399,8 +3406,16 @@ public class DatabaseConfig {
* When false we either register entity classes via application code or use classpath
* scanning to find and register entity classes.
*/
public boolean isLoadModuleInfo() {
return loadModuleInfo;
}
/**
* Deprecated - migrate to isLoadModuleInfo().
*/
@Deprecated
public boolean isAutoLoadModuleInfo() {
return loadModuleInfo && classes.isEmpty();
return loadModuleInfo;
}
/**
@@ -3,10 +3,6 @@ package io.ebean.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.ebean.annotation.MutationDetection;
import io.ebean.annotation.PersistBatch;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.JsonConfig;
import io.ebean.config.MatchingNamingConvention;
import io.ebean.config.PlatformConfig;
import io.ebean.config.dbplatform.IdType;
import io.ebean.datasource.DataSourceConfig;
import org.junit.jupiter.api.Assertions;
@@ -93,6 +89,7 @@ class DatabaseConfigTest {
assertTrue(config.isDbOffline());
assertTrue(config.isAutoReadOnlyDataSource());
assertTrue(config.isAutoLoadModuleInfo());
assertTrue(config.isLoadModuleInfo());
assertTrue(config.skipDataSourceCheck());
assertTrue(config.isIdGeneratorAutomatic());
@@ -165,6 +162,7 @@ class DatabaseConfigTest {
assertEquals(MutationDetection.HASH, config.getJsonMutationDetection());
assertTrue(config.getPlatformConfig().isCaseSensitiveCollation());
assertTrue(config.isAutoLoadModuleInfo());
assertTrue(config.isLoadModuleInfo());
assertFalse(config.isQueryPlanEnable());
assertEquals(Long.MAX_VALUE, config.getQueryPlanThresholdMicros());
@@ -175,6 +173,7 @@ class DatabaseConfigTest {
config.setLoadModuleInfo(false);
assertFalse(config.isAutoLoadModuleInfo());
assertFalse(config.isLoadModuleInfo());
config.setAutoPersistUpdates(true);
assertTrue(config.isAutoPersistUpdates());
config.setSkipDataSourceCheck(true);
+3 -3
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<!-- <parent>-->
<!-- <groupId>org.avaje</groupId>-->
@@ -26,7 +26,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
@@ -69,7 +69,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+30 -30
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean bom</name>
@@ -89,112 +89,112 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-joda-time</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-jsonnode</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-externalmapping-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-externalmapping-xml</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-autotune</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>kotlin-querybean-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgis</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-redis</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-spring-txn</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<!-- platforms -->
@@ -202,67 +202,67 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-clickhouse</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-db2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-hana</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mariadb</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mysql</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-nuodb</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-oracle</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgres</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlite</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlserver</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+2 -2
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-core-type</artifactId>
@@ -16,7 +16,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
+7 -7
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-core</artifactId>
@@ -22,7 +22,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -46,13 +46,13 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-externalmapping-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -143,21 +143,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
@@ -62,9 +62,9 @@ public final class LoadBeanRequest extends LoadRequest {
/**
* Return the list of Id values for the beans in the lazy load buffer.
*/
public List<Object> getIdList() {
List<Object> idList = new ArrayList<>();
BeanDescriptor<?> desc = loadBuffer.descriptor();
public List<Object> ids() {
final List<Object> idList = new ArrayList<>(batch.size());
final BeanDescriptor<?> desc = loadBuffer.descriptor();
for (EntityBeanIntercept ebi : batch) {
idList.add(desc.getId(ebi.getOwner()));
}
@@ -111,6 +111,7 @@ public final class LoadBeanRequest extends LoadRequest {
desc.cacheBeanPutAll(list);
}
if (lazyLoadProperty != null) {
List<EntityBeanIntercept> missed = new ArrayList<>();
Set<Object> missedIds = new HashSet<>();
for (EntityBeanIntercept ebi : batch) {
// check if the underlying row in DB was deleted. Mark the bean as 'failed' if
@@ -120,23 +121,26 @@ public final class LoadBeanRequest extends LoadRequest {
// assume this is logically deleted (hence not found)
desc.markAsDeleted(ebi.getOwner());
missedIds.add(id);
missed.add(ebi);
}
}
return new Result(loadedIds, missedIds);
return new Result(loadedIds, missedIds, missed);
}
return EMPTY_RESULT;
}
static final Result EMPTY_RESULT = new Result(Collections.emptySet(),Collections.emptySet());
static final Result EMPTY_RESULT = new Result(Collections.emptySet(),Collections.emptySet(), Collections.emptyList());
public static class Result {
private final Set<Object> loadedIds;
private final Set<Object> missedIds;
private final List<EntityBeanIntercept> missed;
Result(Set<Object> loadedIds, Set<Object> missedIds) {
Result(Set<Object> loadedIds, Set<Object> missedIds, List<EntityBeanIntercept> missed) {
this.loadedIds = loadedIds;
this.missedIds = missedIds;
this.missed = missed;
}
public boolean markedDeleted() {
@@ -150,5 +154,9 @@ public final class LoadBeanRequest extends LoadRequest {
public Set<Object> loadedIds() {
return loadedIds;
}
public List<EntityBeanIntercept> missed() {
return missed;
}
}
}
@@ -34,5 +34,5 @@ public interface SpiJsonReader {
Object readValueUsingObjectMapper(Class<?> propertyType) throws IOException;
boolean intercept();
boolean update();
}
@@ -18,7 +18,8 @@ import java.text.MessageFormat;
import java.util.List;
import java.util.Set;
import static java.lang.System.Logger.Level.*;
import static java.lang.System.Logger.Level.DEBUG;
import static java.lang.System.Logger.Level.ERROR;
/**
* Helper to handle lazy loading and refreshing of beans.
@@ -125,23 +126,26 @@ final class DefaultBeanLoader {
* Load a batch of beans for +query or +lazy loading.
*/
void loadBean(LoadBeanRequest loadRequest) {
Set<EntityBeanIntercept> batch = loadRequest.batch();
final Set<EntityBeanIntercept> batch = loadRequest.batch();
if (batch.isEmpty()) {
throw new RuntimeException("Nothing in batch?");
}
List<Object> idList = loadRequest.getIdList();
if (idList.isEmpty()) {
// everything was loaded from cache
final List<Object> ids = loadRequest.ids();
if (ids.isEmpty()) {
// this should never happen given the batch is not empty
CoreLog.internal.log(ERROR, "No Ids when loading Batch buffer");
return;
}
SpiQuery<?> query = server.createQuery(loadRequest.beanType());
loadRequest.configureQuery(query, idList);
final SpiQuery<?> query = server.createQuery(loadRequest.beanType());
loadRequest.configureQuery(query, ids);
final List<?> list = executeQuery(loadRequest, query);
final LoadBeanRequest.Result result = loadRequest.postLoad(list);
if (result.markedDeleted() && CoreLog.markedAsDeleted.isLoggable(DEBUG)) {
String msg = MessageFormat.format("Loaded bean marked as deleted for {0} missedIds:{1} loadedIds:{2} sql:{3} list:{4}", loadRequest.beanType(), result.missedIds(), result.loadedIds(), query.getGeneratedSql(), list);
CoreLog.markedAsDeleted.log(DEBUG, "Loaded bean batch {0}", batch);
String msg = MessageFormat.format("Loaded bean marked as deleted for {0} ids:{1} missedIds:{2} loadedIds:{3} sql:{4} loadedList:{5} missed:{6}",
loadRequest.beanType(), ids, result.missedIds(), result.loadedIds(), query.getGeneratedSql(), list, result.missed());
CoreLog.markedAsDeleted.log(DEBUG, msg, new RuntimeException("LoadBeanRequest markedAsDeleted"));
}
}
@@ -17,8 +17,8 @@ import javax.persistence.PersistenceException;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.concurrent.locks.ReentrantLock;
import static java.lang.System.Logger.Level.*;
@@ -121,7 +121,7 @@ public final class DefaultContainer implements SpiContainer {
configProvider.apply(config);
}
}
if (config.isAutoLoadModuleInfo()) {
if (config.isLoadModuleInfo()) {
// auto register entity classes
boolean found = false;
for (EntityClassRegister loader : ServiceLoader.load(EntityClassRegister.class)) {
@@ -177,10 +177,10 @@ public final class DefaultContainer implements SpiContainer {
* Get the class based entities, scalarTypes, Listeners etc.
*/
private BootupClasses bootupClasses1(DatabaseConfig config) {
List<Class<?>> entityClasses = config.getClasses();
if (config.isDisableClasspathSearch() || (entityClasses != null && !entityClasses.isEmpty())) {
Set<Class<?>> classes = config.classes();
if (config.isDisableClasspathSearch() || (classes != null && !classes.isEmpty())) {
// use classes we explicitly added via configuration
return new BootupClasses(entityClasses);
return new BootupClasses(classes);
}
return BootupClassPathSearch.search(config);
}
@@ -22,6 +22,7 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import static java.lang.System.Logger.Level.DEBUG;
@@ -79,9 +80,9 @@ public class BootupClasses implements Predicate<Class<?>> {
public BootupClasses() {
}
public BootupClasses(List<Class<?>> list) {
if (list != null) {
for (Class<?> cls : list) {
public BootupClasses(Set<Class<?>> classes) {
if (classes != null) {
for (Class<?> cls : classes) {
test(cls);
}
}
@@ -133,7 +133,12 @@ final class BeanDescriptorJsonHelp<T> {
String key = parser.getCurrentName();
BeanProperty p = desc.beanProperty(key);
if (p != null) {
p.jsonRead(readJson, bean);
if (p.isVersion() && readJson.update() ) {
// skip version prop during update
p.jsonRead(readJson);
} else {
p.jsonRead(readJson, bean);
}
} else {
// read an unmapped property
if (unmappedProperties == null) {
@@ -20,9 +20,9 @@ import io.ebeaninternal.api.SpiExpressionRequest;
import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.api.json.SpiJsonReader;
import io.ebeaninternal.api.json.SpiJsonWriter;
import io.ebeaninternal.server.bind.DataBind;
import io.ebeaninternal.server.core.EncryptAlias;
import io.ebeaninternal.server.core.InternString;
import io.ebeaninternal.server.bind.DataBind;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedProperty;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedWhenCreated;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedWhenModified;
@@ -1408,15 +1408,20 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
}
public void jsonRead(SpiJsonReader ctx, EntityBean bean) throws IOException {
Object objValue = jsonRead(ctx);
if (jsonDeserialize) {
if (ctx.update()) {
setValueIntercept(bean, objValue);
} else {
setValue(bean, objValue);
}
}
}
public Object jsonRead(SpiJsonReader ctx) throws IOException {
JsonToken event = ctx.nextToken();
if (JsonToken.VALUE_NULL == event) {
if (jsonDeserialize) {
if (ctx.intercept()) {
setValueIntercept(bean, null);
} else {
setValue(bean, null);
}
}
return null;
} else {
// expect to read non-null json value
Object objValue;
@@ -1433,13 +1438,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
CoreLog.log.log(ERROR, msg, e);
}
}
if (jsonDeserialize) {
if (ctx.intercept()) {
setValueIntercept(bean, objValue);
} else {
setValue(bean, objValue);
}
}
return objValue;
}
}
@@ -2,6 +2,8 @@ package io.ebeaninternal.server.deploy;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.ebean.SqlUpdate;
import io.ebean.Transaction;
import io.ebean.bean.BeanCollection;
@@ -27,6 +29,7 @@ import java.io.StringWriter;
import java.util.*;
import static java.lang.System.Logger.Level.ERROR;
import static java.lang.System.Logger.Level.WARNING;
/**
* Property mapped to a List Set or Map.
@@ -937,7 +940,7 @@ public class BeanPropertyAssocMany<T> extends BeanPropertyAssoc<T> implements ST
if (elementDescriptor != null) {
elementDescriptor.jsonWriteMapEntry(ctx, entry);
} else {
targetDescriptor.jsonWrite(ctx, (EntityBean)entry.getValue());
targetDescriptor.jsonWrite(ctx, (EntityBean) entry.getValue());
}
}
@@ -1003,7 +1006,7 @@ public class BeanPropertyAssocMany<T> extends BeanPropertyAssoc<T> implements ST
if (JsonToken.VALUE_NULL == event) {
return null;
}
return jsonReadCollection(ctx, null);
return jsonReadCollection(ctx, null, null);
}
/**
@@ -1016,15 +1019,16 @@ public class BeanPropertyAssocMany<T> extends BeanPropertyAssoc<T> implements ST
/**
* Read the collection (JSON Array) containing entity beans.
*/
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean, Object targets) throws IOException {
if (elementDescriptor != null && elementDescriptor.isJsonReadCollection()) {
return elementDescriptor.jsonReadCollection(readJson, parentBean);
}
BeanCollection<?> collection = createEmpty(parentBean);
BeanCollectionAdd add = beanCollectionAdd(collection);
Map<Object, T> existingBeans = extractBeans(targets);
do {
// CHECKME: Update existing list entry here?
EntityBean detailBean = (EntityBean) targetDescriptor.jsonRead(readJson, name, null);
EntityBean detailBean = getDetailBean(readJson, existingBeans);
if (detailBean == null) {
// read the entire array
break;
@@ -1039,6 +1043,63 @@ public class BeanPropertyAssocMany<T> extends BeanPropertyAssoc<T> implements ST
return collection;
}
/**
* Find bean in the target collection and reuse it for JSON update.
*/
private EntityBean getDetailBean(SpiJsonReader readJson, Map<Object, T> targets) throws IOException {
BeanProperty idProperty = targetDescriptor.idProperty();
if (targets == null || idProperty == null) {
return (EntityBean) targetDescriptor.jsonRead(readJson, name, null);
} else {
JsonToken token = readJson.parser().nextToken();
if (JsonToken.VALUE_NULL == token || JsonToken.END_ARRAY == token) {
return null;
}
// extract the id. We have to buffer the JSON;
ObjectNode node = readJson.mapper().readTree(readJson.parser());
SpiJsonReader jsonReader = readJson.forJson(node.traverse());
JsonNode idNode = node.get(idProperty.name());
Object id = idNode == null ? null : idProperty.jsonRead(readJson.forJson(idNode.traverse()));
return (EntityBean) targetDescriptor.jsonRead(jsonReader, name, targets.get(id));
}
}
/**
* Extract beans, that are currently in the target collection. (targets can be a List/Set/Map)
*/
private Map<Object, T> extractBeans(Object targets) {
Collection<T> beans;
if (targets == null) {
return null;
} else if (targets instanceof Map) {
if (((Map<?, T>) targets).isEmpty()) {
return null;
}
beans = ((Map<?, T>) targets).values();
} else if (targets instanceof Collection) {
if (((Collection<?>) targets).isEmpty()) {
return null;
}
beans = (Collection<T>) targets;
} else {
CoreLog.log.log(WARNING, "Found non collection value " + targets.getClass().getSimpleName());
return null;
}
BeanProperty idProp = targetDescriptor.idProperty();
Map<Object, T> ret = new HashMap<>();
for (T bean : beans) {
if (bean instanceof EntityBean) {
Object id = idProp.getValue((EntityBean) bean);
if (id != null) {
ret.put(id, bean);
}
}
}
return ret.isEmpty() ? null : ret;
}
/**
* Bind all the property values to the SqlUpdate.
*/
@@ -50,10 +50,10 @@ class BeanPropertyAssocManyJsonHelp {
if (JsonToken.START_ARRAY != event && JsonToken.START_OBJECT != event) {
throw new JsonParseException(parser, "Unexpected token " + event + " - expecting start array or object");
}
if (readJson.intercept()) {
many.setValueIntercept(parentBean, many.jsonReadCollection(readJson, parentBean));
if (readJson.update()) {
many.setValueIntercept(parentBean, many.jsonReadCollection(readJson, parentBean, many.value(parentBean)));
} else {
many.setValue(parentBean, many.jsonReadCollection(readJson, parentBean));
many.setValue(parentBean, many.jsonReadCollection(readJson, parentBean, null));
}
}
@@ -787,9 +787,10 @@ public class BeanPropertyAssocOne<T> extends BeanPropertyAssoc<T> implements STr
@Override
public void jsonRead(SpiJsonReader readJson, EntityBean bean) throws IOException {
if (jsonDeserialize && targetDescriptor != null) {
T target = (T) value(bean);
// CHECKME: may we skip reading the object from the json stream?
T target = readJson.update() ? (T) value(bean) : null;
T assocBean = targetDescriptor.jsonRead(readJson, name, target);
if (readJson.intercept()) {
if (readJson.update()) {
setValueIntercept(bean, assocBean);
} else {
setValue(bean, assocBean);
@@ -797,6 +798,11 @@ public class BeanPropertyAssocOne<T> extends BeanPropertyAssoc<T> implements STr
}
}
@Override
public Object jsonRead(SpiJsonReader readJson) throws IOException {
return targetDescriptor.jsonRead(readJson, name, null);
}
public boolean isReference(Object detailBean) {
EntityBean eb = (EntityBean) detailBean;
return targetDescriptor.isReference(eb._ebean_getIntercept());
@@ -19,7 +19,7 @@ public final class BeanPropertySimpleCollection<T> extends BeanPropertyAssocMany
}
@Override
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean, Object collectionValue) throws IOException {
return elementDescriptor.jsonReadCollection(readJson, parentBean);
}
}
@@ -32,13 +32,13 @@ public final class ReadJson implements SpiJsonReader {
private final Object objectMapper;
private final PersistenceContext persistenceContext;
private final LoadContext loadContext;
private final boolean intercept;
private final boolean update;
private final boolean enableLazyLoading;
/**
* Construct with parser and readOptions.
*/
public ReadJson(BeanDescriptor<?> desc, JsonParser parser, JsonReadOptions readOptions, Object objectMapper, boolean intercept) {
public ReadJson(BeanDescriptor<?> desc, JsonParser parser, JsonReadOptions readOptions, Object objectMapper, boolean update) {
this.rootDesc = desc;
this.parser = parser;
this.objectMapper = objectMapper;
@@ -48,7 +48,7 @@ public final class ReadJson implements SpiJsonReader {
// only create visitorMap, pathStack if needed ...
this.visitorMap = (readOptions == null) ? null : readOptions.getVisitorMap();
this.pathStack = (visitorMap == null && loadContext == null) ? null : new PathStack();
this.intercept = intercept;
this.update = update;
}
/**
@@ -62,7 +62,7 @@ public final class ReadJson implements SpiJsonReader {
this.objectMapper = source.objectMapper;
this.persistenceContext = source.persistenceContext;
this.loadContext = source.loadContext;
this.intercept = source.intercept;
this.update = source.update;
this.enableLazyLoading = source.enableLazyLoading;
}
@@ -213,10 +213,10 @@ public final class ReadJson implements SpiJsonReader {
}
/**
* Do we have to set values via intercept or not.
* Do we update an existing bean? This meeans we have to set values via intercept and handle collections.
*/
@Override
public boolean intercept() {
return intercept;
public boolean update() {
return update;
}
}
@@ -125,6 +125,11 @@ final class DLoadBeanContext extends DLoadBaseContext implements LoadBeanContext
this.batch = new HashSet<>(Math.max((int) (batchSize/.75f) + 1, 16));
}
@Override
public String toString() {
return "LoadBuffer@" + hashCode();
}
@Override
public Lock lock() {
bufferLock.lock();
@@ -8,6 +8,7 @@ import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.querydefn.OrmQueryLimitRequest;
import io.ebeaninternal.server.querydefn.OrmQueryProperties;
import io.ebeaninternal.server.rawsql.SpiRawSql;
import io.ebeaninternal.server.util.BindParamsParser;
@@ -56,7 +57,19 @@ final class CQueryBuilderRawSql {
private String buildMainQuery(String orderBy, OrmQueryRequest<?> request, CQueryPredicates predicates, SpiRawSql.Sql sql) {
StringBuilder sb = new StringBuilder();
sb.append(sql.getPreFrom());
OrmQueryProperties ormQueryProperties = request.query().getDetail().getChunk(null, false);
if (ormQueryProperties.hasSelectClause()) {
boolean first = true;
for (String selectProperty : ormQueryProperties.getIncluded()) {
if (!first) {
sb.append(", ");
}
sb.append(selectProperty);
first = false;
}
} else {
sb.append(sql.getPreFrom());
}
sb.append(" ");
String s = sql.getPreWhere();
@@ -591,10 +591,17 @@ public class DefaultOrmQuery<T> extends AbstractQuery implements SpiQuery<T> {
*/
@Override
public final void setSelectId() {
// clear select and fetch joins
detail.clear();
select(beanDescriptor.idSelect());
singleAttribute = true;
if (rawSql != null) {
String column = rawSql.mapToColumn(beanDescriptor.idSelect());
if (column != null) {
select(column);
}
} else {
// clear select and fetch joins
detail.clear();
select(beanDescriptor.idSelect());
singleAttribute = true;
}
}
@Override
@@ -60,4 +60,8 @@ public final class DRawSql implements SpiRawSql {
return columnMapping;
}
@Override
public String mapToColumn(String property) {
return columnMapping.mapToColumn(property);
}
}
@@ -5,13 +5,7 @@ import io.ebean.util.CamelCaseHelper;
import java.io.Serializable;
import java.sql.ResultSet;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* Internal service API for Raw Sql.
@@ -31,6 +25,7 @@ public interface SpiRawSql extends RawSql {
SpiRawSql.ColumnMapping getColumnMapping();
String mapToColumn(String property);
/**
* Represents the sql part of the query. For parsed RawSql the sql is broken
@@ -363,7 +358,6 @@ public interface SpiRawSql extends RawSql {
* </p>
*/
public void tableAliasMapping(String tableAlias, String path) {
String startMatch = tableAlias + ".";
for (Map.Entry<String, Column> entry : dbColumnMap.entrySet()) {
if (entry.getKey().startsWith(startMatch)) {
@@ -372,6 +366,11 @@ public interface SpiRawSql extends RawSql {
}
}
public String mapToColumn(String property) {
final var column = propertyColumnMap.get(property);
return column == null ? null : column.getDbColumn();
}
/**
* A Column of the RawSql that is mapped to a bean property (or ignored).
*/
@@ -24,7 +24,7 @@ public class BeanDescriptor_registerTest {
config.setDdlExtra(false);
config.setRegister(false);
config.setDefaultServer(false);
config.getClasses().add(EBasic.class);
config.addClass(EBasic.class);
SpiEbeanServer ebeanServer = (SpiEbeanServer)DatabaseFactory.create(config);
try {
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-csv-reader</artifactId>
@@ -14,21 +14,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean ddl generation</name>
@@ -28,14 +28,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
@@ -72,7 +72,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean external mapping api</name>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<scm>
@@ -21,7 +21,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-externalmapping-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<!-- JAVAX-DEPENDENCY-START -->
@@ -68,21 +68,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+2 -2
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-jackson-jsonnode</artifactId>
@@ -14,7 +14,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
+2 -2
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -14,7 +14,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
+2 -2
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -14,7 +14,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core-type</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
+3 -3
View File
@@ -6,7 +6,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-kotlin</artifactId>
@@ -28,7 +28,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
@@ -50,7 +50,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+4 -4
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean postgis</name>
@@ -22,14 +22,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<!-- provided scope -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
@@ -65,7 +65,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+5 -5
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean querybean</name>
@@ -17,7 +17,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
@@ -63,21 +63,21 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-redis</artifactId>
@@ -22,35 +22,35 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>querybean-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+3 -3
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-spring-txn</artifactId>
@@ -28,7 +28,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
@@ -77,7 +77,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-test</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+8 -8
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>ebean test</name>
@@ -28,20 +28,20 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
@@ -118,28 +118,28 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-joda-time</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-jsonnode</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-jackson-mapper</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-all</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
@@ -111,8 +111,8 @@ public class PlatformNoGeneratedKeysTest {
config.setRegister(false);
config.setDdlGenerate(true);
config.setDdlRun(true);
config.getClasses().add(EBasicVer.class);
config.getClasses().add(BasicDraftableBean.class);
config.addClass(EBasicVer.class);
config.addClass(BasicDraftableBean.class);
config.loadFromProperties(); // trigger auto config for H2 1.x
return DatabaseFactory.create(config);
@@ -3,9 +3,9 @@ package io.ebean.xtest.config;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.xtest.ForPlatform;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.xtest.ForPlatform;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.EBasicVer;
@@ -36,7 +36,7 @@ public class ServerConfigSqlServerTest {
config.setDefaultServer(false);
config.setRegister(false);
config.getClasses().add(EBasicVer.class);
config.addClass(EBasicVer.class);
Database sqlServer = DatabaseFactory.create(config);
@@ -77,7 +77,7 @@ public class ServerConfigSqlServerTest {
config.setDdlGenerate(true);
config.setDdlRun(true);
config.loadFromProperties(props);
config.getClasses().add(EBasicVer.class);
config.addClass(EBasicVer.class);
Database sqlServer = DatabaseFactory.create(config);
@@ -103,7 +103,7 @@ public class ServerConfigSqlServerTest {
config.setName(name); // match dataSource
config.setDatabasePlatformName("sqlserver16");
config.loadFromProperties(props);
config.getClasses().add(EBasicVer.class);
config.addClass(EBasicVer.class);
Database sqlServer = DatabaseFactory.create(config);
@@ -1,6 +1,5 @@
package io.ebean.xtest.event;
import io.ebean.xtest.BaseTestCase;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.bean.BeanCollection;
@@ -8,6 +7,7 @@ import io.ebean.common.BeanList;
import io.ebean.config.DatabaseConfig;
import io.ebean.event.BeanFindController;
import io.ebean.event.BeanQueryRequest;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import org.tests.example.ModUuidGenerator;
import org.tests.model.basic.EBasic;
@@ -37,8 +37,8 @@ public class BeanFindControllerTest extends BaseTestCase {
config.setRegister(false);
config.setDefaultServer(false);
config.add(new ModUuidGenerator());
config.getClasses().add(EBasic.class);
config.getClasses().add(ECustomId.class);
config.addClass(EBasic.class);
config.addClass(ECustomId.class);
EBasicFindController findController = new EBasicFindController();
config.getFindControllers().add(findController);
@@ -180,9 +180,9 @@ public class BeanFindControllerTest extends BaseTestCase {
config.setRegister(false);
config.setDefaultServer(false);
config.add(new ModUuidGenerator());
config.getClasses().add(FindControllerMain.class);
config.getClasses().add(SoftRefA.class);
config.getClasses().add(SoftRefB.class);
config.addClass(FindControllerMain.class);
config.addClass(SoftRefA.class);
config.addClass(SoftRefB.class);
config.getFindControllers().add(new TestBeanFindController());
@@ -4,7 +4,6 @@ package io.ebean.xtest.event;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.Transaction;
import io.ebean.ValuePair;
import io.ebean.config.DatabaseConfig;
import io.ebean.event.BeanDeleteIdRequest;
import io.ebean.event.BeanPersistAdapter;
@@ -14,7 +13,9 @@ import org.tests.model.basic.EBasicVer;
import org.tests.model.basic.UTDetail;
import org.tests.model.basic.UTMaster;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@@ -148,9 +149,9 @@ public class BeanPersistControllerTest {
config.setRegister(false);
config.setDefaultServer(false);
config.getClasses().add(EBasicVer.class);
config.getClasses().add(UTMaster.class);
config.getClasses().add(UTDetail.class);
config.addClass(EBasicVer.class);
config.addClass(UTMaster.class);
config.addClass(UTDetail.class);
config.add(persistAdapter);
return DatabaseFactory.create(config);
@@ -1,7 +1,10 @@
package io.ebean.xtest.event;
import io.ebean.*;
import io.ebean.BeanState;
import io.ebean.DB;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.config.DatabaseConfig;
import io.ebean.event.BeanPostLoad;
import io.ebean.xtest.BaseTestCase;
@@ -55,7 +58,7 @@ public class BeanPostLoadTest extends BaseTestCase {
config.setRegister(false);
config.setDefaultServer(false);
config.getClasses().add(EBasicVer.class);
config.addClass(EBasicVer.class);
config.add(postLoad);
@@ -1,10 +1,13 @@
package io.ebean.xtest.internal.server.transaction;
import io.ebean.*;
import io.ebean.xtest.BaseTestCase;
import io.ebean.xtest.ForPlatform;
import io.ebean.DB;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.Transaction;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.xtest.BaseTestCase;
import io.ebean.xtest.ForPlatform;
import io.ebeaninternal.api.SpiTransaction;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.EBasicVer;
@@ -139,9 +142,9 @@ public class DefaultTransactionThreadLocalTest extends BaseTestCase {
config.setRegister(false);
config.setDefaultServer(false);
config.getClasses().add(EBasicVer.class);
config.getClasses().add(UTMaster.class);
config.getClasses().add(UTDetail.class);
config.addClass(EBasicVer.class);
config.addClass(UTMaster.class);
config.addClass(UTDetail.class);
return DatabaseFactory.create(config);
}
@@ -5,7 +5,7 @@ import io.ebean.test.containers.SqlServerContainer;
public class StartSqlServer {
public static void main(String[] args) {
SqlServerContainer.builder("2019-GA-ubuntu-16.04")
SqlServerContainer.builder("2022-RTM-CU2-ubuntu-20.04")
.dbName("test_ebean")
.user("test_ebean")
.build()
@@ -130,9 +130,9 @@ class MultiTenantPartitionTest extends BaseTestCase {
config.setCurrentTenantProvider(new CurrentTenant());
config.setTenantMode(TenantMode.PARTITION);
config.getClasses().add(MtTenant.class);
config.getClasses().add(MtContent.class);
config.getClasses().add(MtNone.class);
config.addClass(MtTenant.class);
config.addClass(MtContent.class);
config.addClass(MtNone.class);
return DatabaseFactory.create(config);
}
@@ -1,7 +1,7 @@
package org.tests.basic;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DB;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.ResetBasicData;
import org.tests.model.interfaces.Address;
@@ -9,23 +9,18 @@ import org.tests.model.interfaces.IAddress;
import org.tests.model.interfaces.IPerson;
import org.tests.model.interfaces.Person;
public class TestManyOneInterface extends BaseTestCase {
class TestManyOneInterface extends BaseTestCase {
@Test
public void test() {
void test() {
ResetBasicData.reset();
IAddress a = new Address("hello");
IPerson p = new Person();
DB.save(p);
IAddress a = new Address("hello", p);
p.setDefaultAddress(a);
DB.save(a);
DB.save(p);
//Assert.assertTrue();
}
}
@@ -2,7 +2,6 @@ package org.tests.expression.bitwise;
import io.ebean.Model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;
@@ -15,8 +14,6 @@ public class BwBean extends Model {
String name;
// sqlserver wants integer type for bitwise AND operator
@Column(columnDefinition = "integer")
long flags;
@Version
@@ -1,8 +1,8 @@
package org.tests.model.elementcollection;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DB;
import io.ebean.test.LoggedSql;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import java.util.List;
@@ -50,15 +50,17 @@ class TestElementCollectionBasicSet extends BaseTestCase {
Set<String> phoneNumbers0 = found.get(0).getPhoneNumbers();
Set<String> phoneNumbers1 = found.get(1).getPhoneNumbers();
phoneNumbers0.size();
assertThat(phoneNumbers0).containsExactlyInAnyOrder("021 1234", "021 4321");
assertThat(phoneNumbers1).containsExactlyInAnyOrder("09 1234", "09 4321", "09 9876");
sql = LoggedSql.collect();
assertThat(sql).hasSize(2);
assertThat(sql).hasSize(1);
assertSql(sql.get(0)).contains("select t0.id, t0.name, t0.version from ecs_person t0 where");
assertSql(sql.get(1)).contains("select t0.ecs_person_id, t0.phone from ecs_person_phone t0 where");
phoneNumbers0.size(); // invoke lazy loading
sql = LoggedSql.collect();
assertThat(sql).hasSize(1);
assertThat(phoneNumbers0).containsExactlyInAnyOrder("021 1234", "021 4321");
assertThat(phoneNumbers1).containsExactlyInAnyOrder("09 1234", "09 4321", "09 9876");
assertSql(sql.get(0)).contains("select t0.ecs_person_id, t0.phone from ecs_person_phone t0 where");
List<EcsPerson> found2 =
DB.find(EcsPerson.class)
@@ -1,7 +1,8 @@
package org.tests.model.elementcollection;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DB;
import io.ebean.test.LoggedSql;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import java.util.LinkedHashMap;
@@ -32,6 +33,7 @@ public class TestElementCollectionCascade extends BaseTestCase {
Map<String, Set<String>> childVals = new LinkedHashMap<>();
LoggedSql.start();
final EcsmParent foundParent = DB.find(EcsmParent.class, parent.getId());
final List<EcsmChild> children1 = foundParent.getChildren();
for (EcsmChild ecsmOne : children1) {
@@ -39,6 +41,13 @@ public class TestElementCollectionCascade extends BaseTestCase {
values.size();
childVals.put(ecsmOne.getName(), values);
}
List<String> sql = LoggedSql.stop();
assertThat(sql).hasSize(3);
assertThat(sql.get(0)).contains("select t0.id, t0.name, t0.version from ecsm_parent t0 where t0.id = ?");
if (!isPostgresCompatible()) {
assertThat(sql.get(1)).contains("select t0.ecsm_parent_id, t0.one_id, t0.name, t0.version from ecsm_child t0 where (t0.ecsm_parent_id) in (?)");
assertThat(sql.get(2)).contains("select t0.host_id, t0.value from ecsm_values t0 where (t0.host_id) in (?,?)");
}
Set<String> vals0 = childVals.get("c0");
assertThat(vals0).hasSize(22);
@@ -2,6 +2,7 @@ package org.tests.model.interfaces;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Version;
@Entity
@@ -13,10 +14,14 @@ public class Address implements IAddress {
@Version
private int version;
@ManyToOne(targetEntity=Person.class, optional=false)
private IPerson person;
private String street;
public Address(String street) {
public Address(String street, IPerson person) {
this.street = street;
this.person = person;
}
public long getOid() {
@@ -1,9 +1,7 @@
package org.tests.model.interfaces;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Version;
import javax.persistence.*;
import java.util.List;
@Entity
public class Person implements IPerson {
@@ -13,6 +11,8 @@ public class Person implements IPerson {
@Version
private int version;
@OneToMany(targetEntity=Address.class)
private List<IAddress> addresses;
@ManyToOne(targetEntity = Address.class)
private IAddress defaultAddress;
@@ -42,4 +42,11 @@ public class Person implements IPerson {
this.version = version;
}
public List<IAddress> getAddresses() {
return addresses;
}
public void setAddresses(List<IAddress> addresses) {
this.addresses = addresses;
}
}
@@ -1,16 +1,17 @@
package org.tests.model.interfaces;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DB;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class TestTargetEntity extends BaseTestCase {
class TestTargetEntity extends BaseTestCase {
@Test
public void test() {
void test() {
Person person = setup();
Persona persona = new Persona("junk");
@@ -20,17 +21,48 @@ public class TestTargetEntity extends BaseTestCase {
Persona found = DB.find(Persona.class, persona.getId());
assertThat(found).isNotNull();
assertThat(found.persona()).isEqualTo("junk");
assertThat(found.getPerson().getDefaultAddress().getStreet()).isEqualTo("street");
IPerson person1 = found.getPerson();
IAddress address = person1.getDefaultAddress();
assertThat(address.getStreet()).isEqualTo("street");
person1.setDefaultAddress(null);
DB.save(person1);
DB.delete(address);
DB.delete(persona);
DB.delete(person);
DB.delete(person.getDefaultAddress());
DB.delete(person1);
}
@Test
void addresses() {
Person p0 = new Person();
Person p1 = new Person();
DB.saveAll(p0, p1);
Address address0 = new Address("a0", p0);
Address address1 = new Address("a1", p0);
Address address2 = new Address("a2", p1);
Address address3 = new Address("a3", p1);
DB.saveAll(address0, address1, address2, address3);
p0.setDefaultAddress(address0);
p1.setDefaultAddress(address2);
DB.saveAll(p0, p1);
List<Person> list = DB.find(Person.class).findList();
for (Person person : list) {
IAddress da0 = person.getDefaultAddress();
da0.getStreet();
}
list.get(0).getAddresses()
.size();
}
private Person setup() {
Address address = new Address("street");
DB.save(address);
Person person = new Person();
DB.save(person);
Address address = new Address("street", person);
DB.save(address);
person.setDefaultAddress(address);
DB.save(person);
return person;
@@ -1,10 +1,10 @@
package org.tests.rawsql;
import io.ebean.*;
import io.ebean.xtest.BaseTestCase;
import io.ebean.xtest.IgnorePlatform;
import io.ebean.annotation.Platform;
import io.ebean.test.LoggedSql;
import io.ebean.xtest.BaseTestCase;
import io.ebean.xtest.IgnorePlatform;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
@@ -21,7 +21,6 @@ public class TestRawSqlOrmQuery extends BaseTestCase {
@Test
public void test() {
ResetBasicData.reset();
RawSql rawSql = RawSqlBuilder.parse("select r.id, r.name from o_customer r ")
@@ -42,10 +41,37 @@ public class TestRawSqlOrmQuery extends BaseTestCase {
LoggedSql.start();
assertThat(query.findCount()).isEqualTo(list.size());
List<String>sql = LoggedSql.stop();
assertThat(sql.get(0)).startsWith("select count(*) from ( select r.id, r.name from o_customer r");
assertThat(sql.get(0)).startsWith("select count(*) from ( select r.id from o_customer r");
assertThat(sql.get(0)).doesNotContain("order by");
}
@Test
public void testFindCount_when_idPropertyNotMapped() {
ResetBasicData.reset();
// mapping does not include the id column & property
RawSql rawSql = RawSqlBuilder.parse("select r.name, r.status from o_customer r ")
.columnMapping("r.name", "name")
.columnMapping("r.status", "status")
.create();
Query<Customer> query = DB.find(Customer.class);
query.setRawSql(rawSql);
query.where().ilike("name", "r%").orderBy("name");
LoggedSql.start();
List<Customer> list = query.findList();
assertNotNull(list);
// check also select count(*)
assertThat(query.findCount()).isEqualTo(list.size());
List<String>sql = LoggedSql.stop();
assertThat(sql.get(0)).startsWith("select r.name, r.status from o_customer r where lower(r.name) like ?");
assertThat(sql.get(0)).contains(" order by r.name");
assertThat(sql.get(1)).startsWith("select count(*) from ( select r.name, r.status from o_customer r where lower(r.name) like ?");
assertThat(sql.get(1)).doesNotContain("order by");
}
@Test
@IgnorePlatform({Platform.MYSQL, Platform.MARIADB, Platform.SQLSERVER})
public void test_upperCaseSql() {
@@ -158,7 +184,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase {
LoggedSql.start();
query.findCount();
List<String>sql = LoggedSql.stop();
assertThat(sql.get(0)).startsWith("select count(*) from ( select o.id, o.order_date, o.ship_date from o_order o");
assertThat(sql.get(0)).startsWith("select count(*) from ( select o.id from o_order o");
assertThat(sql.get(0)).doesNotContain("order by");
}
@@ -193,7 +219,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase {
LoggedSql.start();
query.findCount();
List<String>sql = LoggedSql.stop();
assertThat(sql.get(0)).startsWith("select count(*) from ( select o.id, o.order_date, o.ship_date from o_order o");
assertThat(sql.get(0)).startsWith("select count(*) from ( select o.id from o_order o");
assertThat(sql.get(0)).doesNotContain("order by");
}
@@ -0,0 +1,40 @@
package org.tests.rawsql;
import io.ebean.DB;
import io.ebean.RawSql;
import io.ebean.RawSqlBuilder;
import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.ResetBasicData;
import org.tests.rawsql.transport.QuerySumResponse;
import org.tests.rawsql.transport.SampleReport;
import java.util.List;
class TestRawSqlQuerySelect extends BaseTestCase {
@Test
void testRawSQL() {
ResetBasicData.reset();
RawSql rawSql = RawSqlBuilder.parse("select id, name, anniversary, city from (select c.id, c.name, c.anniversary, a.city from o_customer c left join o_address a ON a.id = c.billing_address_id) w").create();
String sumSql = "COUNT(1) AS count, SUM(id) AS sum";
var query = DB.find(SampleReport.class);
query.setRawSql(rawSql);
query.setMaxRows(10);
List<SampleReport> list = query.findList();
Assertions.assertNotNull(list);
Assertions.assertTrue(!list.isEmpty() && list.size() < 11);
var countSum = DB.find(SampleReport.class)
.setRawSql(rawSql)
//.select(sumSql)
.select(sumSql)
.setMaxRows(10)
.asDto(QuerySumResponse.class)
.findOne();
Assertions.assertInstanceOf(QuerySumResponse.class, countSum);
}
}
@@ -0,0 +1,30 @@
package org.tests.rawsql.transport;
public class QuerySumResponse {
private long count;
private Double sum;
public QuerySumResponse() {
}
public QuerySumResponse(long count, Double sum) {
this.count = count;
this.sum = sum;
}
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
public Double getSum() {
return sum;
}
public void setSum(Double sum) {
this.sum = sum;
}
}
@@ -0,0 +1,12 @@
package org.tests.rawsql.transport;
import javax.persistence.Entity;
import java.sql.Date;
@Entity
public class SampleReport {
Long id;
String name;
Date anniversary;
String city;
}
@@ -12,14 +12,19 @@ import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Address;
import org.tests.model.basic.Contact;
import org.tests.model.basic.ContactNote;
import org.tests.model.basic.Customer;
import java.io.IOException;
import java.io.StringReader;
import java.util.Comparator;
import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TestJsonBeanDescriptorParse extends BaseTestCase {
@@ -32,6 +37,17 @@ public class TestJsonBeanDescriptorParse extends BaseTestCase {
address.setLine1("foo");
DB.save(address);
customer.setBillingAddress(address);
Contact alfred = new Contact("Alfred", "P");
alfred.setId(789); // set some deterministic id
ContactNote note = new ContactNote("Drinks", "Order 100l beer");
note.setId(890);
alfred.getNotes().add(note);
customer.getContacts().add(alfred);
Contact anton = new Contact("Anton", "P");
anton.setId(790);
anton.getNotes().add(new ContactNote("Equipment", "Organize barbecue"));
customer.getContacts().add(anton);
DB.save(customer);
}
@@ -59,6 +75,38 @@ public class TestJsonBeanDescriptorParse extends BaseTestCase {
assertThat(beanState.dirtyValues()).isEmpty();
}
@Test
public void testJsonManyUpdate() throws IOException {
Customer customer = DB.find(Customer.class, 234);
String json =
"{\"contacts\": [ "
+ " {\"id\": 789, \"lastName\": \"Praml\", \"notes\": ["
+ " {\"id\": 890,\"title\": \"Beer\",\"note\": \"Order 200l beer\",\"version\": 17},"
+ " {\"title\": \"Food\",\"note\": \"Order 20 steaks\"}"
+ " ]},"
+ " {\"id\": 790, \"firstName\": \"Anton\", \"lastName\": null, \"notes\" : null } "
+ "]}";
DB.json().toBean(customer, json);
DB.save(customer);
customer = DB.find(Customer.class, 234);
assertThat(customer.getContacts()).hasSize(2);
customer.getContacts().sort(Comparator.comparing(Contact::getId));
Contact contact = customer.getContacts().get(0);
assertThat(contact.getFirstName()).isEqualTo("Alfred");
assertThat(contact.getLastName()).isEqualTo("Praml");
assertThat(contact.getNotes()).hasSize(2).extracting(ContactNote::getNote)
.containsExactlyInAnyOrder("Order 200l beer", "Order 20 steaks");
contact = customer.getContacts().get(1);
assertThat(contact.getFirstName()).isEqualTo("Anton");
assertThat(contact.getLastName()).isEqualTo(null);
assertThat(contact.getNotes()).hasSize(1);
}
@Test
public void testJsonUpdate() throws IOException {
Customer customer = DB.find(Customer.class, 234);
@@ -21,36 +21,36 @@ create table migtest_ckey_parent (
);
create table migtest_fk_cascade (
id numeric(19) identity(1,1) not null,
one_id numeric(19),
id bigint identity(1,1) not null,
one_id bigint,
constraint pk_migtest_fk_cascade primary key (id)
);
create table migtest_fk_cascade_one (
id numeric(19) identity(1,1) not null,
id bigint identity(1,1) not null,
constraint pk_migtest_fk_cascade_one primary key (id)
);
create table migtest_fk_none (
id numeric(19) identity(1,1) not null,
one_id numeric(19),
id bigint identity(1,1) not null,
one_id bigint,
constraint pk_migtest_fk_none primary key (id)
);
create table migtest_fk_none_via_join (
id numeric(19) identity(1,1) not null,
one_id numeric(19),
id bigint identity(1,1) not null,
one_id bigint,
constraint pk_migtest_fk_none_via_join primary key (id)
);
create table migtest_fk_one (
id numeric(19) identity(1,1) not null,
id bigint identity(1,1) not null,
constraint pk_migtest_fk_one primary key (id)
);
create table migtest_fk_set_null (
id numeric(19) identity(1,1) not null,
one_id numeric(19),
id bigint identity(1,1) not null,
one_id bigint,
constraint pk_migtest_fk_set_null primary key (id)
);
@@ -185,7 +185,7 @@ create table migtest_mtm_c (
);
create table migtest_mtm_m (
id numeric(19) identity(1,1) not null,
id bigint identity(1,1) not null,
name varchar(255),
constraint pk_migtest_mtm_m primary key (id)
);
@@ -197,7 +197,7 @@ create table migtest_oto_child (
);
create table migtest_oto_master (
id numeric(19) identity(1,1) not null,
id bigint identity(1,1) not null,
name varchar(255),
constraint pk_migtest_oto_master primary key (id)
);
@@ -23,18 +23,18 @@ create table migtest_e_user (
create table migtest_mtm_c_migtest_mtm_m (
migtest_mtm_c_id integer not null,
migtest_mtm_m_id numeric(19) not null,
migtest_mtm_m_id bigint not null,
constraint pk_migtest_mtm_c_migtest_mtm_m primary key (migtest_mtm_c_id,migtest_mtm_m_id)
);
create table migtest_mtm_m_migtest_mtm_c (
migtest_mtm_m_id numeric(19) not null,
migtest_mtm_m_id bigint not null,
migtest_mtm_c_id integer not null,
constraint pk_migtest_mtm_m_migtest_mtm_c primary key (migtest_mtm_m_id,migtest_mtm_c_id)
);
create table migtest_mtm_m_phone_numbers (
migtest_mtm_m_id numeric(19) not null,
migtest_mtm_m_id bigint not null,
value varchar(255) not null
);
@@ -88,21 +88,21 @@ alter table migtest_e_basic add new_boolean_field bit default 1 not null;
alter table migtest_e_basic add new_boolean_field2 bit default 1 not null;
alter table migtest_e_basic add progress integer default 0 not null;
alter table migtest_e_basic add new_integer integer default 42 not null;
alter table migtest_e_history alter column test_string numeric(19);
alter table migtest_e_history alter column test_string bigint;
EXEC usp_ebean_drop_default_constraint migtest_e_history2, test_string;
alter table migtest_e_history2 alter column test_string varchar(255) not null;
alter table migtest_e_history2 add default 'unknown' for test_string;
alter table migtest_e_history2 add test_string2 varchar(255);
alter table migtest_e_history2 add test_string3 varchar(255) default 'unknown' not null;
alter table migtest_e_history2 add new_column varchar(20);
alter table migtest_e_history4 alter column test_number numeric(19);
alter table migtest_e_history4 alter column test_number bigint;
alter table migtest_e_history5 add test_boolean bit default 0 not null;
EXEC usp_ebean_drop_default_constraint migtest_e_history6, test_number1;
alter table migtest_e_history6 alter column test_number1 integer not null;
alter table migtest_e_history6 add default 42 for test_number1;
alter table migtest_e_history6 alter column test_number2 integer;
alter table migtest_e_softdelete add deleted bit default 0 not null;
alter table migtest_oto_child add master_id numeric(19);
alter table migtest_oto_child add master_id bigint;
-- apply post alter
alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?'));
create unique nonclustered index uq_migtest_e_basic_description on migtest_e_basic(description) where description is not null;
@@ -1,6 +1,6 @@
891357544, I__create_procs.sql
-1556604899, 1.0__initial.sql
359145725, 1.1.sql
254353963, 1.0__initial.sql
523634078, 1.1.sql
-599071889, 1.2__dropsFor_1.1.sql
-1831804381, 1.3.sql
-628940135, 1.4__dropsFor_1.3.sql
@@ -23,41 +23,41 @@ create table migtest_ckey_parent (
);
create table migtest_fk_cascade (
id numeric(19) not null,
one_id numeric(19),
id bigint not null,
one_id bigint,
constraint pk_migtest_fk_cascade primary key (id)
);
create sequence migtest_fk_cascade_seq as bigint start with 1;
create table migtest_fk_cascade_one (
id numeric(19) not null,
id bigint not null,
constraint pk_migtest_fk_cascade_one primary key (id)
);
create sequence migtest_fk_cascade_one_seq as bigint start with 1;
create table migtest_fk_none (
id numeric(19) not null,
one_id numeric(19),
id bigint not null,
one_id bigint,
constraint pk_migtest_fk_none primary key (id)
);
create sequence migtest_fk_none_seq as bigint start with 1;
create table migtest_fk_none_via_join (
id numeric(19) not null,
one_id numeric(19),
id bigint not null,
one_id bigint,
constraint pk_migtest_fk_none_via_join primary key (id)
);
create sequence migtest_fk_none_via_join_seq as bigint start with 1;
create table migtest_fk_one (
id numeric(19) not null,
id bigint not null,
constraint pk_migtest_fk_one primary key (id)
);
create sequence migtest_fk_one_seq as bigint start with 1;
create table migtest_fk_set_null (
id numeric(19) not null,
one_id numeric(19),
id bigint not null,
one_id bigint,
constraint pk_migtest_fk_set_null primary key (id)
);
create sequence migtest_fk_set_null_seq as bigint start with 1;
@@ -207,7 +207,7 @@ create table migtest_mtm_c (
create sequence migtest_mtm_c_seq as bigint start with 1;
create table migtest_mtm_m (
id numeric(19) not null,
id bigint not null,
name nvarchar(255),
constraint pk_migtest_mtm_m primary key (id)
);
@@ -221,7 +221,7 @@ create table migtest_oto_child (
create sequence migtest_oto_child_seq as bigint start with 1;
create table migtest_oto_master (
id numeric(19) not null,
id bigint not null,
name nvarchar(255),
constraint pk_migtest_oto_master primary key (id)
);
@@ -24,18 +24,18 @@ create sequence migtest_e_user_seq as bigint start with 1;
create table migtest_mtm_c_migtest_mtm_m (
migtest_mtm_c_id integer not null,
migtest_mtm_m_id numeric(19) not null,
migtest_mtm_m_id bigint not null,
constraint pk_migtest_mtm_c_migtest_mtm_m primary key (migtest_mtm_c_id,migtest_mtm_m_id)
);
create table migtest_mtm_m_migtest_mtm_c (
migtest_mtm_m_id numeric(19) not null,
migtest_mtm_m_id bigint not null,
migtest_mtm_c_id integer not null,
constraint pk_migtest_mtm_m_migtest_mtm_c primary key (migtest_mtm_m_id,migtest_mtm_c_id)
);
create table migtest_mtm_m_phone_numbers (
migtest_mtm_m_id numeric(19) not null,
migtest_mtm_m_id bigint not null,
value nvarchar(255) not null
);
@@ -89,21 +89,21 @@ alter table migtest_e_basic add new_boolean_field bit default 1 not null;
alter table migtest_e_basic add new_boolean_field2 bit default 1 not null;
alter table migtest_e_basic add progress integer default 0 not null;
alter table migtest_e_basic add new_integer integer default 42 not null;
alter table migtest_e_history alter column test_string numeric(19);
alter table migtest_e_history alter column test_string bigint;
EXEC usp_ebean_drop_default_constraint migtest_e_history2, test_string;
alter table migtest_e_history2 alter column test_string nvarchar(255) not null;
alter table migtest_e_history2 add default 'unknown' for test_string;
alter table migtest_e_history2 add test_string2 nvarchar(255);
alter table migtest_e_history2 add test_string3 nvarchar(255) default 'unknown' not null;
alter table migtest_e_history2 add new_column nvarchar(20);
alter table migtest_e_history4 alter column test_number numeric(19);
alter table migtest_e_history4 alter column test_number bigint;
alter table migtest_e_history5 add test_boolean bit default 0 not null;
EXEC usp_ebean_drop_default_constraint migtest_e_history6, test_number1;
alter table migtest_e_history6 alter column test_number1 integer not null;
alter table migtest_e_history6 add default 42 for test_number1;
alter table migtest_e_history6 alter column test_number2 integer;
alter table migtest_e_softdelete add deleted bit default 0 not null;
alter table migtest_oto_child add master_id numeric(19);
alter table migtest_oto_child add master_id bigint;
-- apply post alter
alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?'));
create unique nonclustered index uq_migtest_e_basic_description on migtest_e_basic(description) where description is not null;
@@ -1,6 +1,6 @@
891357544, I__create_procs.sql
1994995811, 1.0__initial.sql
1778963293, 1.1.sql
-2080592180, 1.0__initial.sql
1381251697, 1.1.sql
-599071889, 1.2__dropsFor_1.1.sql
495243310, 1.3.sql
-628940135, 1.4__dropsFor_1.3.sql
@@ -1,3 +1,5 @@
ebean.test.platform=postgres
datasource.default=postgres
ebean.test.dbName=unit
ebean.test.postgres.version=15
+13 -13
View File
@@ -1,24 +1,24 @@
#!/usr/bin/env bash
## adjust pom dependencies
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|<!-- JAKARTA-DEPENDENCY-START -->|<!-- JAKARTA-DEPENDENCY-START ___|g' {} +
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|<!-- JAKARTA-DEPENDENCY-END -->|____ JAKARTA-DEPENDENCY-END -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|<!-- JAVAX-DEPENDENCY-START ___|<!-- JAVAX-DEPENDENCY-START -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|____ JAVAX-DEPENDENCY-END -->|<!-- JAVAX-DEPENDENCY-END -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|<!-- JAKARTA-DEPENDENCY-START -->|<!-- JAKARTA-DEPENDENCY-START ___|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|<!-- JAKARTA-DEPENDENCY-END -->|____ JAKARTA-DEPENDENCY-END -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|<!-- JAVAX-DEPENDENCY-START ___|<!-- JAVAX-DEPENDENCY-START -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|____ JAVAX-DEPENDENCY-END -->|<!-- JAVAX-DEPENDENCY-END -->|g' {} +
sed -i'' -e 's|artifactId>jakarta-persistence-api|artifactId>persistence-api|g' ebean-api/pom.xml ebean-bom/pom.xml
sed -i '' -e 's|artifactId>jakarta-persistence-api|artifactId>persistence-api|g' ebean-api/pom.xml ebean-bom/pom.xml
## adjust module-info
sed -i'' -e 's| jakarta\.persistence\.api| persistence\.api|g' ebean-api/src/main/java/module-info.java
sed -i'' -e 's| jakarta\.servlet;| javax\.servlet\.api;|g' ebean-api/src/main/java/module-info.java
sed -i '' -e 's| jakarta\.persistence\.api| persistence\.api|g' ebean-api/src/main/java/module-info.java
sed -i '' -e 's| jakarta\.servlet;| javax\.servlet\.api;|g' ebean-api/src/main/java/module-info.java
find . -type f -name 'module-info.java' -exec sed -i'' -e 's|jakarta\.xml\.bind|java\.xml\.bind|g' {} +
find . -type f -name 'module-info.java' -exec sed -i '' -e 's|jakarta\.xml\.bind|java\.xml\.bind|g' {} +
## adjust code
find ebean-api/src/main/java/io/ebean/event -type f -name '*.java' -exec sed -i'' -e 's|jakarta\.servlet|javax\.servlet|g' {} +
find ebean-api/src/main/java/io/ebean/event -type f -name '*.java' -exec sed -i '' -e 's|jakarta\.servlet|javax\.servlet|g' {} +
find . -type f -name '*.java' -exec sed -i'' -e 's|jakarta\.persistence\.|javax\.persistence\.|g' {} +
find . -type f -name '*.kt' -exec sed -i'' -e 's|jakarta\.persistence\.|javax\.persistence\.|g' {} +
find . -type f -name '*.java' -exec sed -i'' -e 's|jakarta\.xml\.bind|javax\.xml\.bind|g' {} +
find . -type f -name '*.kt' -exec sed -i'' -e 's|jakarta\.xml\.bind|javax\.xml\.bind|g' {} +
find . -type f -name '*.java' -exec sed -i '' -e 's|jakarta\.persistence\.|javax\.persistence\.|g' {} +
find . -type f -name '*.kt' -exec sed -i '' -e 's|jakarta\.persistence\.|javax\.persistence\.|g' {} +
find . -type f -name '*.java' -exec sed -i '' -e 's|jakarta\.xml\.bind|javax\.xml\.bind|g' {} +
find . -type f -name '*.kt' -exec sed -i '' -e 's|jakarta\.xml\.bind|javax\.xml\.bind|g' {} +
+13 -13
View File
@@ -1,24 +1,24 @@
#!/usr/bin/env bash
## adjust pom dependencies
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|<!-- JAVAX-DEPENDENCY-START -->|<!-- JAVAX-DEPENDENCY-START ___|g' {} +
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|<!-- JAVAX-DEPENDENCY-END -->|____ JAVAX-DEPENDENCY-END -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|<!-- JAKARTA-DEPENDENCY-START ___|<!-- JAKARTA-DEPENDENCY-START -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i'' -e 's|____ JAKARTA-DEPENDENCY-END -->|<!-- JAKARTA-DEPENDENCY-END -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|<!-- JAVAX-DEPENDENCY-START -->|<!-- JAVAX-DEPENDENCY-START ___|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|<!-- JAVAX-DEPENDENCY-END -->|____ JAVAX-DEPENDENCY-END -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|<!-- JAKARTA-DEPENDENCY-START ___|<!-- JAKARTA-DEPENDENCY-START -->|g' {} +
find . -type f -name 'pom.xml' -exec sed -i '' -e 's|____ JAKARTA-DEPENDENCY-END -->|<!-- JAKARTA-DEPENDENCY-END -->|g' {} +
sed -i'' -e 's|artifactId>persistence-api|artifactId>jakarta-persistence-api|g' ebean-api/pom.xml ebean-bom/pom.xml
sed -i '' -e 's|artifactId>persistence-api|artifactId>jakarta-persistence-api|g' ebean-api/pom.xml ebean-bom/pom.xml
## adjust module-info
sed -i'' -e 's| persistence\.api| jakarta\.persistence\.api|g' ebean-api/src/main/java/module-info.java
sed -i'' -e 's| javax\.servlet\.api| jakarta\.servlet|g' ebean-api/src/main/java/module-info.java
sed -i '' -e 's| persistence\.api| jakarta\.persistence\.api|g' ebean-api/src/main/java/module-info.java
sed -i '' -e 's| javax\.servlet\.api| jakarta\.servlet|g' ebean-api/src/main/java/module-info.java
find . -type f -name 'module-info.java' -exec sed -i'' -e 's|java\.xml\.bind|jakarta\.xml\.bind|g' {} +
find . -type f -name 'module-info.java' -exec sed -i '' -e 's|java\.xml\.bind|jakarta\.xml\.bind|g' {} +
## adjust code
find ebean-api/src/main/java/io/ebean/event -type f -name '*.java' -exec sed -i'' -e 's|javax\.servlet|jakarta\.servlet|g' {} +
find ebean-api/src/main/java/io/ebean/event -type f -name '*.java' -exec sed -i '' -e 's|javax\.servlet|jakarta\.servlet|g' {} +
find . -type f -name '*.java' -exec sed -i'' -e 's|javax\.persistence\.|jakarta\.persistence\.|g' {} +
find . -type f -name '*.kt' -exec sed -i'' -e 's|javax\.persistence\.|jakarta\.persistence\.|g' {} +
find . -type f -name '*.java' -exec sed -i'' -e 's|javax\.xml\.bind|jakarta\.xml\.bind|g' {} +
find . -type f -name '*.kt' -exec sed -i'' -e 's|javax\.xml\.bind|jakarta\.xml\.bind|g' {} +
find . -type f -name '*.java' -exec sed -i '' -e 's|javax\.persistence\.|jakarta\.persistence\.|g' {} +
find . -type f -name '*.kt' -exec sed -i '' -e 's|javax\.persistence\.|jakarta\.persistence\.|g' {} +
find . -type f -name '*.java' -exec sed -i '' -e 's|javax\.xml\.bind|jakarta\.xml\.bind|g' {} +
find . -type f -name '*.kt' -exec sed -i '' -e 's|javax\.xml\.bind|jakarta\.xml\.bind|g' {} +
+6 -6
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>ebean-parent</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<name>kotlin querybean generator</name>
@@ -12,7 +12,7 @@
<artifactId>kotlin-querybean-generator</artifactId>
<properties>
<kotlin.version>1.6.20</kotlin.version>
<kotlin.version>1.8.10</kotlin.version>
</properties>
<dependencies>
@@ -29,7 +29,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-querybean</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
@@ -43,7 +43,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-core</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
@@ -64,14 +64,14 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
<scope>test</scope>
</dependency>
+14 -14
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>platforms</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-platform-all</artifactId>
@@ -14,67 +14,67 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-h2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-clickhouse</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-db2</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hana</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-hsqldb</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mysql</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-mariadb</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-nuodb</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-oracle</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-postgres</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlanywhere</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlite</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-platform-sqlserver</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>
+2 -2
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>platforms</artifactId>
<groupId>io.ebean</groupId>
<version>13.14.1</version>
<version>13.15.1</version>
</parent>
<artifactId>ebean-platform-clickhouse</artifactId>
@@ -14,7 +14,7 @@
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-api</artifactId>
<version>13.14.1</version>
<version>13.15.1</version>
</dependency>
</dependencies>

Some files were not shown because too many files have changed in this diff Show More