Skip to content

Commit c5c60da

Browse files
committed
Polishing.
Original pull request #1403 See #1286
1 parent 8eb80af commit c5c60da

10 files changed

+186
-60
lines changed

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

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.springframework.data.domain.Sort;
2424
import org.springframework.data.jdbc.repository.support.SimpleJdbcRepository;
2525
import org.springframework.data.mapping.PersistentPropertyPath;
26-
import org.springframework.data.mapping.PropertyPath;
2726
import org.springframework.data.mapping.context.MappingContext;
2827
import org.springframework.data.relational.core.dialect.Dialect;
2928
import org.springframework.data.relational.core.dialect.RenderContextFactory;
@@ -697,13 +696,13 @@ private String createDeleteByIdAndVersionSql() {
697696

698697
private DeleteBuilder.DeleteWhereAndOr createBaseDeleteById(Table table) {
699698

700-
return Delete.builder().from(table)
699+
return Delete.builder().from(table) //
701700
.where(getIdColumn().isEqualTo(getBindMarker(ID_SQL_PARAMETER)));
702701
}
703702

704703
private DeleteBuilder.DeleteWhereAndOr createBaseDeleteByIdIn(Table table) {
705704

706-
return Delete.builder().from(table)
705+
return Delete.builder().from(table) //
707706
.where(getIdColumn().in(getBindMarker(IDS_SQL_PARAMETER)));
708707
}
709708

@@ -784,45 +783,37 @@ private List<OrderByField> extractOrderByFields(Sort sort) {
784783
}
785784

786785
private OrderByField orderToOrderByField(Sort.Order order) {
786+
787787
SqlIdentifier columnName = getColumnNameToSortBy(order);
788788
Column column = Column.create(columnName, this.getTable());
789789
return OrderByField.from(column, order.getDirection()).withNullHandling(order.getNullHandling());
790790
}
791791

792792
private SqlIdentifier getColumnNameToSortBy(Sort.Order order) {
793-
SqlIdentifier columnName = null;
793+
794794
RelationalPersistentProperty propertyToSortBy = entity.getPersistentProperty(order.getProperty());
795795
if (propertyToSortBy != null) {
796796
return propertyToSortBy.getColumnName();
797797
}
798798

799-
PersistentPropertyPath<RelationalPersistentProperty> persistentPropertyPath = mappingContext.getPersistentPropertyPath(
800-
order.getProperty(), entity.getType()
801-
);
799+
PersistentPropertyPath<RelationalPersistentProperty> persistentPropertyPath = mappingContext
800+
.getPersistentPropertyPath(order.getProperty(), entity.getType());
802801

803802
propertyToSortBy = persistentPropertyPath.getBaseProperty();
804803

805-
if (propertyToSortBy == null || !propertyToSortBy.isEmbedded()) {
806-
throwPropertyNotMarkedAsEmbeddedException(order);
807-
} else {
808-
RelationalPersistentEntity<?> embeddedEntity = mappingContext.getRequiredPersistentEntity(propertyToSortBy.getType());
809-
columnName = embeddedEntity.getRequiredPersistentProperty(extractFieldNameFromEmbeddedProperty(order)).getColumnName();
810-
}
811-
return columnName;
812-
}
813-
814-
private void throwPropertyNotMarkedAsEmbeddedException(Sort.Order order) {
815-
throw new IllegalArgumentException(
816-
String.format(
817-
"Specified sorting property '%s' is expected to " +
818-
"be the property, named '%s', of embedded entity '%s', but field '%s' is " +
819-
"not marked with @Embedded",
820-
order.getProperty(),
821-
extractFieldNameFromEmbeddedProperty(order),
822-
extractEmbeddedPropertyName(order),
823-
extractEmbeddedPropertyName(order)
824-
)
825-
);
804+
Assert.state(propertyToSortBy != null && propertyToSortBy.isEmbedded(), () -> String.format( //
805+
"Specified sorting property '%s' is expected to " + //
806+
"be the property, named '%s', of embedded entity '%s', but field '%s' is " + //
807+
"not marked with @Embedded", //
808+
order.getProperty(), //
809+
extractFieldNameFromEmbeddedProperty(order), //
810+
extractEmbeddedPropertyName(order), //
811+
extractEmbeddedPropertyName(order) //
812+
));
813+
814+
RelationalPersistentEntity<?> embeddedEntity = mappingContext
815+
.getRequiredPersistentEntity(propertyToSortBy.getType());
816+
return embeddedEntity.getRequiredPersistentProperty(extractFieldNameFromEmbeddedProperty(order)).getColumnName();
826817
}
827818

828819
public String extractEmbeddedPropertyName(Sort.Order order) {

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ PersonRepository personRepository() {
9292
@Autowired NamedParameterJdbcTemplate template;
9393
@Autowired DummyEntityRepository repository;
9494
@Autowired PersonRepository personRepository;
95-
9695
@Autowired WithDotColumnRepo withDotColumnRepo;
9796

9897
@Test // DATAJDBC-111
@@ -246,6 +245,7 @@ public void saveWithNullValueEmbeddable() {
246245

247246
@Test // GH-1286
248247
public void findOrderedByEmbeddedProperty() {
248+
249249
Person first = new Person(null, "Bob", "Seattle", new PersonContacts("ddd@example.com", "+1 111 1111 11 11"));
250250
Person second = new Person(null, "Alex", "LA", new PersonContacts("aaa@example.com", "+2 222 2222 22 22"));
251251
Person third = new Person(null, "Sarah", "NY", new PersonContacts("ggg@example.com", "+3 333 3333 33 33"));
@@ -254,7 +254,6 @@ public void findOrderedByEmbeddedProperty() {
254254

255255
Iterable<Person> fetchedPersons = personRepository.findAll(Sort.by(new Sort.Order(Sort.Direction.ASC, "personContacts.email")));
256256

257-
Assertions.assertThat(fetchedPersons).hasSize(3);
258257
Assertions.assertThat(fetchedPersons).containsExactly(second, first, third);
259258
}
260259

@@ -269,7 +268,6 @@ public void sortingWorksCorrectlyIfColumnHasDotInItsName() {
269268

270269
Iterable<WithDotColumn> fetchedPersons = withDotColumnRepo.findAll(Sort.by(new Sort.Order(Sort.Direction.ASC, "address")));
271270

272-
Assertions.assertThat(fetchedPersons).hasSize(3);
273271
Assertions.assertThat(fetchedPersons).containsExactly(second, first, third);
274272
}
275273

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,27 @@
11
DROP TABLE dummy_entity;
2-
CREATE TABLE dummy_entity ( id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, TEST VARCHAR(100), PREFIX2_ATTR BIGINT, PREFIX_TEST VARCHAR(100), PREFIX_PREFIX2_ATTR BIGINT);
3-
42
DROP TABLE SORT_EMBEDDED_ENTITY;
5-
CREATE TABLE SORT_EMBEDDED_ENTITY (id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, first_name VARCHAR(100), address VARCHAR(255), email VARCHAR(255), phone_number VARCHAR(255));
6-
73
DROP TABLE WITH_DOT_COLUMN;
8-
CREATE TABLE WITH_DOT_COLUMN (id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, "address.city" VARCHAR(255));
4+
5+
CREATE TABLE dummy_entity
6+
(
7+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
8+
TEST VARCHAR(100),
9+
PREFIX2_ATTR BIGINT,
10+
PREFIX_TEST VARCHAR(100),
11+
PREFIX_PREFIX2_ATTR BIGINT
12+
);
13+
14+
CREATE TABLE SORT_EMBEDDED_ENTITY
15+
(
16+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
17+
first_name VARCHAR(100),
18+
address VARCHAR(255),
19+
email VARCHAR(255),
20+
phone_number VARCHAR(255)
21+
);
22+
23+
CREATE TABLE WITH_DOT_COLUMN
24+
(
25+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
26+
"address.city" VARCHAR(255)
27+
);
Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1-
CREATE TABLE dummy_entity ( id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, TEST VARCHAR(100), PREFIX2_ATTR BIGINT, PREFIX_TEST VARCHAR(100), PREFIX_PREFIX2_ATTR BIGINT);
2-
CREATE TABLE SORT_EMBEDDED_ENTITY (id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, first_name VARCHAR(100), address VARCHAR(255), email VARCHAR(255), phone_number VARCHAR(255));
3-
CREATE TABLE WITH_DOT_COLUMN (id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, "address.city" VARCHAR(255));
1+
CREATE TABLE dummy_entity
2+
(
3+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
4+
TEST VARCHAR(100),
5+
PREFIX2_ATTR BIGINT,
6+
PREFIX_TEST VARCHAR(100),
7+
PREFIX_PREFIX2_ATTR BIGINT
8+
);
9+
10+
CREATE TABLE SORT_EMBEDDED_ENTITY
11+
(
12+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
13+
first_name VARCHAR(100),
14+
address VARCHAR(255),
15+
email VARCHAR(255),
16+
phone_number VARCHAR(255)
17+
);
18+
19+
CREATE TABLE WITH_DOT_COLUMN
20+
(
21+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
22+
"address.city" VARCHAR(255)
23+
);
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1-
CREATE TABLE dummy_entity ( id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, TEST VARCHAR(100), PREFIX2_ATTR BIGINT, PREFIX_TEST VARCHAR(100), PREFIX_PREFIX2_ATTR BIGINT);
2-
CREATE TABLE SORT_EMBEDDED_ENTITY (id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, first_name VARCHAR(100), address VARCHAR(255), email VARCHAR(255), phone_number VARCHAR(255));
3-
CREATE TABLE WITH_DOT_COLUMN (id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, "address.city" VARCHAR(255));
1+
CREATE TABLE dummy_entity
2+
(
3+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
4+
TEST VARCHAR(100),
5+
PREFIX2_ATTR BIGINT,
6+
PREFIX_TEST VARCHAR(100),
7+
PREFIX_PREFIX2_ATTR BIGINT
8+
);
9+
10+
CREATE TABLE SORT_EMBEDDED_ENTITY
11+
(
12+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
13+
first_name VARCHAR(100),
14+
address VARCHAR(255),
15+
email VARCHAR(255),
16+
phone_number VARCHAR(255)
17+
);
18+
19+
CREATE TABLE WITH_DOT_COLUMN
20+
(
21+
id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY,
22+
"address.city" VARCHAR(255)
23+
);
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1-
CREATE TABLE dummy_entity (id BIGINT AUTO_INCREMENT PRIMARY KEY, TEST VARCHAR(100), PREFIX2_ATTR BIGINT, PREFIX_TEST VARCHAR(100), PREFIX_PREFIX2_ATTR BIGINT);
2-
CREATE TABLE SORT_EMBEDDED_ENTITY (id BIGINT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(100), address VARCHAR(255), email VARCHAR(255), phone_number VARCHAR(255));
3-
CREATE TABLE WITH_DOT_COLUMN (id BIGINT AUTO_INCREMENT PRIMARY KEY, `address.city` VARCHAR(255));
1+
CREATE TABLE dummy_entity
2+
(
3+
id BIGINT AUTO_INCREMENT PRIMARY KEY,
4+
TEST VARCHAR(100),
5+
PREFIX2_ATTR BIGINT,
6+
PREFIX_TEST VARCHAR(100),
7+
PREFIX_PREFIX2_ATTR BIGINT
8+
);
9+
10+
CREATE TABLE SORT_EMBEDDED_ENTITY
11+
(
12+
id BIGINT AUTO_INCREMENT PRIMARY KEY,
13+
first_name VARCHAR(100),
14+
address VARCHAR(255),
15+
email VARCHAR(255),
16+
phone_number VARCHAR(255)
17+
);
18+
19+
CREATE TABLE WITH_DOT_COLUMN
20+
(
21+
id BIGINT AUTO_INCREMENT PRIMARY KEY,
22+
`address.city` VARCHAR(255)
23+
);
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,27 @@
11
DROP TABLE IF EXISTS dummy_entity;
2-
CREATE TABLE dummy_entity (id BIGINT IDENTITY PRIMARY KEY, TEST VARCHAR(100), PREFIX2_ATTR BIGINT, PREFIX_TEST VARCHAR(100), PREFIX_PREFIX2_ATTR BIGINT);
3-
42
DROP TABLE IF EXISTS SORT_EMBEDDED_ENTITY;
5-
CREATE TABLE SORT_EMBEDDED_ENTITY (id BIGINT IDENTITY PRIMARY KEY, first_name VARCHAR(100), address VARCHAR(255), email VARCHAR(255), phone_number VARCHAR(255));
6-
73
DROP TABLE IF EXISTS WITH_DOT_COLUMN;
8-
CREATE TABLE WITH_DOT_COLUMN (id BIGINT IDENTITY PRIMARY KEY, "address.city" VARCHAR(255));
4+
5+
CREATE TABLE dummy_entity
6+
(
7+
id BIGINT IDENTITY PRIMARY KEY,
8+
TEST VARCHAR(100),
9+
PREFIX2_ATTR BIGINT,
10+
PREFIX_TEST VARCHAR(100),
11+
PREFIX_PREFIX2_ATTR BIGINT
12+
);
13+
14+
CREATE TABLE SORT_EMBEDDED_ENTITY
15+
(
16+
id BIGINT IDENTITY PRIMARY KEY,
17+
first_name VARCHAR(100),
18+
address VARCHAR(255),
19+
email VARCHAR(255),
20+
phone_number VARCHAR(255)
21+
);
22+
23+
CREATE TABLE WITH_DOT_COLUMN
24+
(
25+
id BIGINT IDENTITY PRIMARY KEY,
26+
"address.city" VARCHAR(255)
27+
);
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1-
CREATE TABLE dummy_entity (id BIGINT AUTO_INCREMENT PRIMARY KEY, TEST VARCHAR(100), PREFIX2_ATTR BIGINT, PREFIX_TEST VARCHAR(100), PREFIX_PREFIX2_ATTR BIGINT);
2-
CREATE TABLE SORT_EMBEDDED_ENTITY (id BIGINT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(100), address VARCHAR(255), email VARCHAR(255), phone_number VARCHAR(255));
3-
CREATE TABLE WITH_DOT_COLUMN (id BIGINT AUTO_INCREMENT PRIMARY KEY, `address.city` VARCHAR(255));
1+
CREATE TABLE dummy_entity
2+
(
3+
id BIGINT AUTO_INCREMENT PRIMARY KEY,
4+
TEST VARCHAR(100),
5+
PREFIX2_ATTR BIGINT,
6+
PREFIX_TEST VARCHAR(100),
7+
PREFIX_PREFIX2_ATTR BIGINT
8+
);
9+
10+
CREATE TABLE SORT_EMBEDDED_ENTITY
11+
(
12+
id BIGINT AUTO_INCREMENT PRIMARY KEY,
13+
first_name VARCHAR(100),
14+
address VARCHAR(255),
15+
email VARCHAR(255),
16+
phone_number VARCHAR(255)
17+
);
18+
19+
CREATE TABLE WITH_DOT_COLUMN
20+
(
21+
id BIGINT AUTO_INCREMENT PRIMARY KEY,
22+
`address.city` VARCHAR(255)
23+
);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
DROP TABLE DUMMY_ENTITY CASCADE CONSTRAINTS PURGE;
2+
DROP TABLE SORT_EMBEDDED_ENTITY CASCADE CONSTRAINTS PURGE;
3+
DROP TABLE WITH_DOT_COLUMN CASCADE CONSTRAINTS PURGE;
24

35
CREATE TABLE DUMMY_ENTITY (
46
ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
@@ -8,7 +10,6 @@ CREATE TABLE DUMMY_ENTITY (
810
PREFIX_PREFIX2_ATTR NUMBER
911
);
1012

11-
DROP TABLE SORT_EMBEDDED_ENTITY CASCADE CONSTRAINTS PURGE;
1213

1314
CREATE TABLE SORT_EMBEDDED_ENTITY (
1415
id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
@@ -18,7 +19,6 @@ CREATE TABLE SORT_EMBEDDED_ENTITY (
1819
phone_number VARCHAR(255)
1920
);
2021

21-
DROP TABLE WITH_DOT_COLUMN CASCADE CONSTRAINTS PURGE;
2222

2323
CREATE TABLE WITH_DOT_COLUMN (
2424
id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,27 @@
11
DROP TABLE dummy_entity;
2-
CREATE TABLE dummy_entity (id SERIAL PRIMARY KEY, TEST VARCHAR(100), PREFIX2_ATTR BIGINT, PREFIX_TEST VARCHAR(100), PREFIX_PREFIX2_ATTR BIGINT);
3-
42
DROP TABLE "SORT_EMBEDDED_ENTITY";
5-
CREATE TABLE "SORT_EMBEDDED_ENTITY" (id SERIAL PRIMARY KEY, first_name VARCHAR(100), address VARCHAR(255), email VARCHAR(255), phone_number VARCHAR(255));
6-
73
DROP TABLE WITH_DOT_COLUMN;
8-
CREATE TABLE WITH_DOT_COLUMN (id SERIAL PRIMARY KEY, "address.city" VARCHAR(255));
4+
5+
CREATE TABLE dummy_entity
6+
(
7+
id SERIAL PRIMARY KEY,
8+
TEST VARCHAR(100),
9+
PREFIX2_ATTR BIGINT,
10+
PREFIX_TEST VARCHAR(100),
11+
PREFIX_PREFIX2_ATTR BIGINT
12+
);
13+
14+
CREATE TABLE "SORT_EMBEDDED_ENTITY"
15+
(
16+
id SERIAL PRIMARY KEY,
17+
first_name VARCHAR(100),
18+
address VARCHAR(255),
19+
email VARCHAR(255),
20+
phone_number VARCHAR(255)
21+
);
22+
23+
CREATE TABLE WITH_DOT_COLUMN
24+
(
25+
id SERIAL PRIMARY KEY,
26+
"address.city" VARCHAR(255)
27+
);

0 commit comments

Comments
 (0)