Browse Source

Merge 8332465ddf into eaf718a1e7

pull/2200/merge
Jens Schauder 4 days ago committed by GitHub
parent
commit
ce2eb2d272
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      pom.xml
  2. 2
      spring-data-jdbc-distribution/pom.xml
  3. 4
      spring-data-jdbc/pom.xml
  4. 2
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/IdGeneratingEntityCallback.java
  5. 28
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIdGenerationIntegrationTests.java
  6. 9
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-db2.sql
  7. 43
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-h2.sql
  8. 43
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-hsql.sql
  9. 43
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-mariadb.sql
  10. 49
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-mssql.sql
  11. 10
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-oracle.sql
  12. 45
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-postgres.sql
  13. 4
      spring-data-r2dbc/pom.xml
  14. 4
      spring-data-relational/pom.xml

2
pom.xml

@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-relational-parent</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Spring Data Relational Parent</name>

2
spring-data-jdbc-distribution/pom.xml

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
<parent>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-relational-parent</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

4
spring-data-jdbc/pom.xml

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-data-jdbc</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
<name>Spring Data JDBC</name>
<description>Spring Data module for JDBC repositories.</description>
@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<parent>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-relational-parent</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
</parent>
<properties>

2
spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/IdGeneratingEntityCallback.java

@ -59,7 +59,7 @@ public class IdGeneratingEntityCallback implements BeforeSaveCallback<Object> { @@ -59,7 +59,7 @@ public class IdGeneratingEntityCallback implements BeforeSaveCallback<Object> {
RelationalPersistentProperty property = entity.getRequiredIdProperty();
PersistentPropertyAccessor<Object> accessor = entity.getPropertyAccessor(aggregate);
if (!entity.isNew(aggregate) || delegate.hasValue(property, accessor) || !property.hasSequence()) {
if (delegate.hasValue(property, accessor) || !property.hasSequence()) {
return aggregate;
}

28
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIdGenerationIntegrationTests.java

@ -69,6 +69,7 @@ class JdbcRepositoryIdGenerationIntegrationTests { @@ -69,6 +69,7 @@ class JdbcRepositoryIdGenerationIntegrationTests {
@Autowired SimpleSeqRepository simpleSeqRepository;
@Autowired PersistableSeqRepository persistableSeqRepository;
@Autowired PrimitiveIdSeqRepository primitiveIdSeqRepository;
@Autowired PrimitiveIdSeqWithVersionRepository primitiveIdSeqWithVersionRepository;
@Autowired IdGeneratingEntityCallback idGeneratingCallback;
@Test // DATAJDBC-98
@ -173,6 +174,22 @@ class JdbcRepositoryIdGenerationIntegrationTests { @@ -173,6 +174,22 @@ class JdbcRepositoryIdGenerationIntegrationTests {
assertThat(saved.id).isEqualTo(1L); // sequence starts with 1
}
@Test // DATAJDBC-2199
@EnabledOnFeature(TestDatabaseFeatures.Feature.SUPPORTS_SEQUENCES)
void testInsertAggregateWithSequenceAndVersionField() {
IdSeqWithVersion entity = new IdSeqWithVersion();
entity.name = "some name";
CompletableFuture<IdSeqWithVersion> afterCallback = mockIdGeneratingCallback(entity);
IdSeqWithVersion saved = primitiveIdSeqWithVersionRepository.save(entity);
// 1. Select from sequence
// 2. Actual INSERT
assertThat(afterCallback.join().id).isEqualTo(1L);
assertThat(saved.id).isEqualTo(1L); // sequence starts with 1
}
@SuppressWarnings("unchecked")
private <T> CompletableFuture<T> mockIdGeneratingCallback(T entity) {
@ -198,6 +215,8 @@ class JdbcRepositoryIdGenerationIntegrationTests { @@ -198,6 +215,8 @@ class JdbcRepositoryIdGenerationIntegrationTests {
interface PrimitiveIdSeqRepository extends ListCrudRepository<PrimitiveIdSeq, Long> {}
interface PrimitiveIdSeqWithVersionRepository extends ListCrudRepository<IdSeqWithVersion, Long> {}
record ReadOnlyIdEntity(@Id Long id, String name) {
}
@ -251,6 +270,15 @@ class JdbcRepositoryIdGenerationIntegrationTests { @@ -251,6 +270,15 @@ class JdbcRepositoryIdGenerationIntegrationTests {
}
static class IdSeqWithVersion {
@Id
@Sequence(value = "seq_with_version_seq") private long id;
private String name;
private Long version;
}
static class PrimitiveIdEntity {
@Id private long id;

9
spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-db2.sql

@ -9,6 +9,8 @@ DROP TABLE PersistableSeq; @@ -9,6 +9,8 @@ DROP TABLE PersistableSeq;
DROP SEQUENCE persistable_seq_seq;
DROP TABLE PrimitiveIdSeq;
DROP SEQUENCE "primitive_seq_seq";
DROP TABLE IdSeqWithVersion;
DROP SEQUENCE "seq_with_version_seq";
CREATE TABLE ReadOnlyIdEntity
(
@ -43,3 +45,10 @@ CREATE TABLE PrimitiveIdSeq @@ -43,3 +45,10 @@ CREATE TABLE PrimitiveIdSeq
NAME VARCHAR(100)
);
CREATE SEQUENCE "primitive_seq_seq" START WITH 1;
CREATE TABLE IdSeqWithVersion
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100),
VERSION BIGINT
);
CREATE SEQUENCE "seq_with_version_seq" START WITH 1;

43
spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-h2.sql

@ -1,12 +1,43 @@ @@ -1,12 +1,43 @@
-- noinspection SqlNoDataSourceInspectionForFile
CREATE TABLE ReadOnlyIdEntity (ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdEntity (ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ImmutableWithManualIdentity (ID BIGINT PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ReadOnlyIdEntity
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE PrimitiveIdEntity
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE ImmutableWithManualIdentity
(
ID BIGINT PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE SimpleSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE SimpleSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE simple_seq_seq START WITH 1;
CREATE TABLE PersistableSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PersistableSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE persistable_seq_seq START WITH 1;
CREATE TABLE PrimitiveIdSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE "primitive_seq_seq" START WITH 1;
CREATE TABLE IdSeqWithVersion
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100),
VERSION BIGINT
);
CREATE SEQUENCE "seq_with_version_seq" START WITH 1;

43
spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-hsql.sql

@ -1,12 +1,43 @@ @@ -1,12 +1,43 @@
-- noinspection SqlNoDataSourceInspectionForFile
CREATE TABLE ReadOnlyIdEntity (ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdEntity (ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ImmutableWithManualIdentity (ID BIGINT PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ReadOnlyIdEntity
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE PrimitiveIdEntity
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE ImmutableWithManualIdentity
(
ID BIGINT PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE SimpleSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE SimpleSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE "simple_seq_seq" START WITH 1;
CREATE TABLE PersistableSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PersistableSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE "persistable_seq_seq" START WITH 1;
CREATE TABLE PrimitiveIdSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE "primitive_seq_seq" START WITH 1;
CREATE TABLE IdSeqWithVersion
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100),
VERSION BIGINT
);
CREATE SEQUENCE "seq_with_version_seq" START WITH 1;

43
spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-mariadb.sql

@ -1,9 +1,40 @@ @@ -1,9 +1,40 @@
CREATE TABLE ReadOnlyIdEntity (ID BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdEntity (ID BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ImmutableWithManualIdentity (ID BIGINT PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE SimpleSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ReadOnlyIdEntity
(
ID BIGINT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE PrimitiveIdEntity
(
ID BIGINT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE ImmutableWithManualIdentity
(
ID BIGINT PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE SimpleSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE simple_seq_seq START WITH 1;
CREATE TABLE PersistableSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PersistableSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE persistable_seq_seq START WITH 1;
CREATE TABLE PrimitiveIdSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE primitive_seq_seq START WITH 1;
CREATE TABLE IdSeqWithVersion
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100),
VERSION BIGINT
);
CREATE SEQUENCE seq_with_version_seq START WITH 1;

49
spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-mssql.sql

@ -9,13 +9,48 @@ DROP SEQUENCE IF EXISTS persistable_seq_seq; @@ -9,13 +9,48 @@ DROP SEQUENCE IF EXISTS persistable_seq_seq;
DROP TABLE IF EXISTS PrimitiveIdSeq;
DROP SEQUENCE IF EXISTS primitive_seq_seq;
CREATE TABLE ReadOnlyIdEntity (ID BIGINT IDENTITY PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdEntity (ID BIGINT IDENTITY PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ImmutableWithManualIdentity (ID BIGINT PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE EntityWithSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE SimpleSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ReadOnlyIdEntity
(
ID BIGINT IDENTITY PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE PrimitiveIdEntity
(
ID BIGINT IDENTITY PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE ImmutableWithManualIdentity
(
ID BIGINT PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE EntityWithSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE SimpleSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE simple_seq_seq START WITH 1;
CREATE TABLE PersistableSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PersistableSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE persistable_seq_seq START WITH 1;
CREATE TABLE PrimitiveIdSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE primitive_seq_seq START WITH 1;
CREATE TABLE IdSeqWithVersion
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100),
VERSION BIGINT
);
CREATE SEQUENCE seq_with_version_seq START WITH 1;

10
spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-oracle.sql

@ -8,6 +8,8 @@ DROP TABLE PersistableSeq; @@ -8,6 +8,8 @@ DROP TABLE PersistableSeq;
DROP SEQUENCE persistable_seq_seq;
DROP TABLE PrimitiveIdSeq;
DROP SEQUENCE "primitive_seq_seq";
DROP TABLE IdSeqWithVersion;
DROP SEQUENCE "seq_with_version_seq";
CREATE TABLE ReadOnlyIdEntity (
ID NUMBER GENERATED by default on null as IDENTITY PRIMARY KEY,
@ -44,3 +46,11 @@ CREATE TABLE PrimitiveIdSeq ( @@ -44,3 +46,11 @@ CREATE TABLE PrimitiveIdSeq (
);
CREATE SEQUENCE "primitive_seq_seq" START WITH 1;
CREATE TABLE IdSeqWithVersion (
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(100),
VERSION NUMBER
);
CREATE SEQUENCE "seq_with_version_seq" START WITH 1;

45
spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIdGenerationIntegrationTests-postgres.sql

@ -5,12 +5,43 @@ DROP TABLE EntityWithSeq; @@ -5,12 +5,43 @@ DROP TABLE EntityWithSeq;
DROP TABLE PersistableEntityWithSeq;
DROP TABLE PrimitiveIdEntityWithSeq;
CREATE TABLE ReadOnlyIdEntity (ID SERIAL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PrimitiveIdEntity (ID SERIAL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ImmutableWithManualIdentity (ID BIGINT PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE SimpleSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE ReadOnlyIdEntity
(
ID SERIAL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE PrimitiveIdEntity
(
ID SERIAL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE ImmutableWithManualIdentity
(
ID BIGINT PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE SimpleSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE simple_seq_seq START WITH 1;
CREATE TABLE PersistableSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE TABLE PersistableSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE persistable_seq_seq START WITH 1;
CREATE TABLE PrimitiveIdSeq (ID BIGINT NOT NULL PRIMARY KEY, NAME VARCHAR(100));
CREATE SEQUENCE primitive_seq_seq START WITH 1;
CREATE TABLE PrimitiveIdSeq
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE SEQUENCE primitive_seq_seq START WITH 1;
CREATE TABLE IdSeqWithVersion
(
ID BIGINT NOT NULL PRIMARY KEY,
NAME VARCHAR(100),
VERSION BIGINT
);
CREATE SEQUENCE seq_with_version_seq START WITH 1;

4
spring-data-r2dbc/pom.xml

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-data-r2dbc</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
<name>Spring Data R2DBC</name>
<description>Spring Data module for R2DBC</description>
@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<parent>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-relational-parent</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
</parent>
<properties>

4
spring-data-relational/pom.xml

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-data-relational</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
<name>Spring Data Relational</name>
<description>Spring Data Relational support</description>
@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
<parent>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-relational-parent</artifactId>
<version>4.1.0-SNAPSHOT</version>
<version>4.1.0-2199-SNAPSHOT</version>
</parent>
<properties>

Loading…
Cancel
Save