Skip to content

Commit 65d4b38

Browse files
committed
DATAJDBC-294 - Fixed handling of Id names in WHERE- clauses.
RelationalPersistentEntityImpl.getIdColumn wasn’t respecting @column annotations.
1 parent ac353da commit 65d4b38

File tree

9 files changed

+54
-35
lines changed

9 files changed

+54
-35
lines changed

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/AggregateTemplateIntegrationTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ private static LegoSet createLegoSet() {
333333
@Data
334334
static class LegoSet {
335335

336+
@Column("id1")
336337
@Id private Long id;
337338

338339
private String name;
@@ -344,13 +345,15 @@ static class LegoSet {
344345
@Data
345346
static class Manual {
346347

348+
@Column("id2")
347349
@Id private Long id;
348350
private String content;
349351

350352
}
351353

352354
static class OneToOneParent {
353355

356+
@Column("id3")
354357
@Id private Long id;
355358
private String content;
356359

@@ -363,6 +366,7 @@ static class ChildNoId {
363366

364367
static class ListParent {
365368

369+
@Column("id4")
366370
@Id private Long id;
367371
String name;
368372
List<ElementNoId> content = new ArrayList<>();

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/SqlGeneratorUnitTests.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
3030
import org.springframework.data.jdbc.core.mapping.PersistentPropertyPathTestUtils;
3131
import org.springframework.data.mapping.PersistentPropertyPath;
32+
import org.springframework.data.relational.core.mapping.Column;
3233
import org.springframework.data.relational.core.mapping.NamingStrategy;
3334
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
3435
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
@@ -68,11 +69,13 @@ public void findOne() {
6869
SoftAssertions softAssertions = new SoftAssertions();
6970
softAssertions.assertThat(sql) //
7071
.startsWith("SELECT") //
71-
.contains("dummy_entity.x_id AS x_id,") //
72+
.contains("dummy_entity.id1 AS id1,") //
7273
.contains("dummy_entity.x_name AS x_name,") //
7374
.contains("dummy_entity.x_other AS x_other,") //
7475
.contains("ref.x_l1id AS ref_x_l1id") //
7576
.contains("ref.x_content AS ref_x_content").contains(" FROM dummy_entity") //
77+
.contains("ON ref.dummy_entity = dummy_entity.id1") //
78+
.contains("WHERE dummy_entity.id1 = :id") //
7679
// 1-N relationships do not get loaded via join
7780
.doesNotContain("Element AS elements");
7881
softAssertions.assertAll();
@@ -142,10 +145,10 @@ public void findAllByProperty() {
142145
// this would get called when ListParent is the element type of a Set
143146
String sql = sqlGenerator.getFindAllByProperty("back-ref", null, false);
144147

145-
assertThat(sql).isEqualTo("SELECT dummy_entity.x_id AS x_id, dummy_entity.x_name AS x_name, " //
148+
assertThat(sql).isEqualTo("SELECT dummy_entity.id1 AS id1, dummy_entity.x_name AS x_name, " //
146149
+ "dummy_entity.x_other AS x_other, " //
147150
+ "ref.x_l1id AS ref_x_l1id, ref.x_content AS ref_x_content, ref.x_further AS ref_x_further " //
148-
+ "FROM dummy_entity LEFT OUTER JOIN referenced_entity AS ref ON ref.dummy_entity = dummy_entity.x_id " //
151+
+ "FROM dummy_entity LEFT OUTER JOIN referenced_entity AS ref ON ref.dummy_entity = dummy_entity.id1 " //
149152
+ "WHERE back-ref = :back-ref");
150153
}
151154

@@ -155,11 +158,11 @@ public void findAllByPropertyWithKey() {
155158
// this would get called when ListParent is th element type of a Map
156159
String sql = sqlGenerator.getFindAllByProperty("back-ref", "key-column", false);
157160

158-
assertThat(sql).isEqualTo("SELECT dummy_entity.x_id AS x_id, dummy_entity.x_name AS x_name, " //
161+
assertThat(sql).isEqualTo("SELECT dummy_entity.id1 AS id1, dummy_entity.x_name AS x_name, " //
159162
+ "dummy_entity.x_other AS x_other, " //
160163
+ "ref.x_l1id AS ref_x_l1id, ref.x_content AS ref_x_content, ref.x_further AS ref_x_further, " //
161164
+ "dummy_entity.key-column AS key-column " //
162-
+ "FROM dummy_entity LEFT OUTER JOIN referenced_entity AS ref ON ref.dummy_entity = dummy_entity.x_id " //
165+
+ "FROM dummy_entity LEFT OUTER JOIN referenced_entity AS ref ON ref.dummy_entity = dummy_entity.id1 " //
163166
+ "WHERE back-ref = :back-ref");
164167
}
165168

@@ -174,11 +177,11 @@ public void findAllByPropertyWithKeyOrdered() {
174177
// this would get called when ListParent is th element type of a Map
175178
String sql = sqlGenerator.getFindAllByProperty("back-ref", "key-column", true);
176179

177-
assertThat(sql).isEqualTo("SELECT dummy_entity.x_id AS x_id, dummy_entity.x_name AS x_name, " //
180+
assertThat(sql).isEqualTo("SELECT dummy_entity.id1 AS id1, dummy_entity.x_name AS x_name, " //
178181
+ "dummy_entity.x_other AS x_other, " //
179182
+ "ref.x_l1id AS ref_x_l1id, ref.x_content AS ref_x_content, ref.x_further AS ref_x_further, " //
180183
+ "dummy_entity.key-column AS key-column " //
181-
+ "FROM dummy_entity LEFT OUTER JOIN referenced_entity AS ref ON ref.dummy_entity = dummy_entity.x_id " //
184+
+ "FROM dummy_entity LEFT OUTER JOIN referenced_entity AS ref ON ref.dummy_entity = dummy_entity.id1 " //
182185
+ "WHERE back-ref = :back-ref " + "ORDER BY key-column");
183186
}
184187

@@ -211,7 +214,7 @@ public void update() {
211214
"dummy_entity", //
212215
"SET", //
213216
"WHERE", //
214-
"x_id = :x_id");
217+
"id1 = :id");
215218
}
216219

217220
private PersistentPropertyPath<RelationalPersistentProperty> getPath(String path, Class<?> base) {
@@ -221,6 +224,7 @@ private PersistentPropertyPath<RelationalPersistentProperty> getPath(String path
221224
@SuppressWarnings("unused")
222225
static class DummyEntity {
223226

227+
@Column("id1")
224228
@Id Long id;
225229
String name;
226230
ReferencedEntity ref;
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
CREATE TABLE LEGO_SET ( id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, NAME VARCHAR(30));
2-
CREATE TABLE MANUAL ( id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
1+
CREATE TABLE LEGO_SET ( id1 BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, NAME VARCHAR(30));
2+
CREATE TABLE MANUAL ( id2 BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
33

44
ALTER TABLE MANUAL ADD FOREIGN KEY (LEGO_SET)
5-
REFERENCES LEGO_SET(id);
5+
REFERENCES LEGO_SET(id1);
66

7-
CREATE TABLE ONE_TO_ONE_PARENT ( id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, content VARCHAR(30));
7+
CREATE TABLE ONE_TO_ONE_PARENT ( id3 BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY, content VARCHAR(30));
88
CREATE TABLE Child_No_Id (ONE_TO_ONE_PARENT INTEGER PRIMARY KEY, content VARCHAR(30));
99

10-
CREATE TABLE LIST_PARENT ( id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, NAME VARCHAR(100));
10+
CREATE TABLE LIST_PARENT ( id4 BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, NAME VARCHAR(100));
1111
CREATE TABLE element_no_id ( content VARCHAR(100), LIST_PARENT_key BIGINT, LIST_PARENT BIGINT);
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
CREATE TABLE LEGO_SET ( id BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(30));
2-
CREATE TABLE MANUAL ( id BIGINT AUTO_INCREMENT PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
1+
CREATE TABLE LEGO_SET ( id1 BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(30));
2+
CREATE TABLE MANUAL ( id2 BIGINT AUTO_INCREMENT PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
33

44
ALTER TABLE MANUAL ADD FOREIGN KEY (LEGO_SET)
5-
REFERENCES LEGO_SET(id);
5+
REFERENCES LEGO_SET(id1);
66

7-
CREATE TABLE ONE_TO_ONE_PARENT ( id BIGINT AUTO_INCREMENT PRIMARY KEY, content VARCHAR(30));
7+
CREATE TABLE ONE_TO_ONE_PARENT ( id3 BIGINT AUTO_INCREMENT PRIMARY KEY, content VARCHAR(30));
88
CREATE TABLE Child_No_Id (ONE_TO_ONE_PARENT INTEGER PRIMARY KEY, content VARCHAR(30));
99

10-
CREATE TABLE LIST_PARENT ( id BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(100));
10+
CREATE TABLE LIST_PARENT ( id4 BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(100));
1111
CREATE TABLE element_no_id ( content VARCHAR(100), LIST_PARENT_key BIGINT, LIST_PARENT BIGINT);
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
DROP TABLE IF EXISTS LEGO_SET;
22
DROP TABLE IF EXISTS MANUAL;
3-
CREATE TABLE LEGO_SET ( id BIGINT IDENTITY PRIMARY KEY, NAME VARCHAR(30));
4-
CREATE TABLE MANUAL ( id BIGINT IDENTITY PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
5-
ALTER TABLE MANUAL ADD FOREIGN KEY (LEGO_SET) REFERENCES LEGO_SET(id);
3+
CREATE TABLE LEGO_SET ( id1 BIGINT IDENTITY PRIMARY KEY, NAME VARCHAR(30));
4+
CREATE TABLE MANUAL ( id2 BIGINT IDENTITY PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
5+
ALTER TABLE MANUAL ADD FOREIGN KEY (LEGO_SET) REFERENCES LEGO_SET(id1);
66

77
DROP TABLE IF EXISTS ONE_TO_ONE_PARENT;
88
DROP TABLE IF EXISTS Child_No_Id;
9-
CREATE TABLE ONE_TO_ONE_PARENT ( id BIGINT IDENTITY PRIMARY KEY, content VARCHAR(30));
9+
CREATE TABLE ONE_TO_ONE_PARENT ( id3 BIGINT IDENTITY PRIMARY KEY, content VARCHAR(30));
1010
CREATE TABLE Child_No_Id (ONE_TO_ONE_PARENT BIGINT PRIMARY KEY, content VARCHAR(30));
1111

1212
DROP TABLE IF EXISTS LIST_PARENT;
1313
DROP TABLE IF EXISTS element_no_id;
14-
CREATE TABLE LIST_PARENT ( id BIGINT IDENTITY PRIMARY KEY, NAME VARCHAR(100));
14+
CREATE TABLE LIST_PARENT ( id4 BIGINT IDENTITY PRIMARY KEY, NAME VARCHAR(100));
1515
CREATE TABLE element_no_id ( content VARCHAR(100), LIST_PARENT_key BIGINT, LIST_PARENT BIGINT);
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
CREATE TABLE LEGO_SET ( id BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(30));
2-
CREATE TABLE MANUAL ( id BIGINT AUTO_INCREMENT PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
1+
CREATE TABLE LEGO_SET ( id1 BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(30));
2+
CREATE TABLE MANUAL ( id2 BIGINT AUTO_INCREMENT PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
33

44
ALTER TABLE MANUAL ADD FOREIGN KEY (LEGO_SET)
5-
REFERENCES LEGO_SET(id);
5+
REFERENCES LEGO_SET(id1);
66

7-
CREATE TABLE ONE_TO_ONE_PARENT ( id BIGINT AUTO_INCREMENT PRIMARY KEY, content VARCHAR(30));
7+
CREATE TABLE ONE_TO_ONE_PARENT ( id3 BIGINT AUTO_INCREMENT PRIMARY KEY, content VARCHAR(30));
88
CREATE TABLE Child_No_Id (ONE_TO_ONE_PARENT INTEGER PRIMARY KEY, content VARCHAR(30));
99

10-
CREATE TABLE LIST_PARENT ( id BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(100));
10+
CREATE TABLE LIST_PARENT ( id4 BIGINT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(100));
1111
CREATE TABLE element_no_id ( content VARCHAR(100), LIST_PARENT_key BIGINT, LIST_PARENT BIGINT);
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
DROP TABLE MANUAL;
22
DROP TABLE LEGO_SET;
33

4-
CREATE TABLE LEGO_SET ( id SERIAL PRIMARY KEY, NAME VARCHAR(30));
5-
CREATE TABLE MANUAL ( id SERIAL PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
4+
CREATE TABLE LEGO_SET ( id1 SERIAL PRIMARY KEY, NAME VARCHAR(30));
5+
CREATE TABLE MANUAL ( id2 SERIAL PRIMARY KEY, LEGO_SET BIGINT, ALTERNATIVE BIGINT, CONTENT VARCHAR(2000));
66

77
ALTER TABLE MANUAL ADD FOREIGN KEY (LEGO_SET)
8-
REFERENCES LEGO_SET(id);
8+
REFERENCES LEGO_SET(id1);
99

10-
CREATE TABLE ONE_TO_ONE_PARENT ( id SERIAL PRIMARY KEY, content VARCHAR(30));
10+
CREATE TABLE ONE_TO_ONE_PARENT ( id3 SERIAL PRIMARY KEY, content VARCHAR(30));
1111
CREATE TABLE Child_No_Id (ONE_TO_ONE_PARENT INTEGER PRIMARY KEY, content VARCHAR(30));
1212

13-
CREATE TABLE LIST_PARENT ( id SERIAL PRIMARY KEY, NAME VARCHAR(100));
13+
CREATE TABLE LIST_PARENT ( id4 SERIAL PRIMARY KEY, NAME VARCHAR(100));
1414
CREATE TABLE element_no_id ( content VARCHAR(100), LIST_PARENT_key BIGINT, LIST_PARENT INTEGER);

spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/RelationalPersistentEntityImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public String getTableName() {
6262
*/
6363
@Override
6464
public String getIdColumn() {
65-
return this.namingStrategy.getColumnName(getRequiredIdProperty());
65+
return getRequiredIdProperty().getColumnName();
6666
}
6767

6868
/*

spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/RelationalPersistentEntityImplUnitTests.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.assertj.core.api.Assertions.*;
1919

2020
import org.junit.Test;
21+
import org.springframework.data.annotation.Id;
2122

2223
/**
2324
* Unit tests for {@link RelationalPersistentEntityImpl}.
@@ -37,6 +38,16 @@ public void discoversAnnotatedTableName() {
3738
assertThat(entity.getTableName()).isEqualTo("dummy_sub_entity");
3839
}
3940

41+
@Test // DATAJDBC-294
42+
public void considerIdColumnName() {
43+
44+
RelationalPersistentEntity<?> entity = mappingContext.getPersistentEntity(DummySubEntity.class);
45+
46+
assertThat(entity.getIdColumn()).isEqualTo("renamedId");
47+
}
48+
4049
@Table("dummy_sub_entity")
41-
static class DummySubEntity {}
50+
static class DummySubEntity {
51+
@Id @Column("renamedId") Long id;
52+
}
4253
}

0 commit comments

Comments
 (0)