Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
2 changes: 1 addition & 1 deletion spring-data-jdbc-distribution/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
4 changes: 2 additions & 2 deletions spring-data-jdbc/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public Object onBeforeSave(Object aggregate, MutableAggregateChange<Object> aggr
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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class JdbcRepositoryIdGenerationIntegrationTests {
@Autowired SimpleSeqRepository simpleSeqRepository;
@Autowired PersistableSeqRepository persistableSeqRepository;
@Autowired PrimitiveIdSeqRepository primitiveIdSeqRepository;
@Autowired PrimitiveIdSeqWithVersionRepository primitiveIdSeqWithVersionRepository;
@Autowired IdGeneratingEntityCallback idGeneratingCallback;

@Test // DATAJDBC-98
Expand Down Expand Up @@ -173,6 +174,22 @@ void testInsertAggregateWithSequenceAndUnsetPrimitiveId() {
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) {

Expand All @@ -198,6 +215,8 @@ interface PersistableSeqRepository extends ListCrudRepository<PersistableSeq, Lo

interface PrimitiveIdSeqRepository extends ListCrudRepository<PrimitiveIdSeq, Long> {}

interface PrimitiveIdSeqWithVersionRepository extends ListCrudRepository<IdSeqWithVersion, Long> {}

record ReadOnlyIdEntity(@Id Long id, String name) {
}

Expand Down Expand Up @@ -251,6 +270,15 @@ static class PrimitiveIdSeq {

}

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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
(
Expand Down Expand Up @@ -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;
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Loading
Loading