From 08ee846e71e67d2bedf443c92132d0e3781eec20 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 18 Sep 2018 14:34:05 +0200 Subject: [PATCH] DATAJDBC-218 - The Column annotation affects the back reference too. Also: Added documentation for the new behavior. Made the value of the column annotation optional by providing a default. Original pull request: #83. --- src/main/asciidoc/jdbc.adoc | 3 ++- .../mapping/BasicRelationalPersistentProperty.java | 10 ++++++++-- .../data/relational/core/mapping/Column.java | 2 +- .../BasicRelationalPersistentPropertyUnitTests.java | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/asciidoc/jdbc.adoc b/src/main/asciidoc/jdbc.adoc index 9d4722c5d..92c2539bf 100644 --- a/src/main/asciidoc/jdbc.adoc +++ b/src/main/asciidoc/jdbc.adoc @@ -131,7 +131,8 @@ You can change this name by implementing `NamingStrategy.getReverseColumnName(Re * `Map` is considered a qualified one-to-many relationship. The table of the referenced entity is expected to have two additional columns: One named the same as the table of the referencing entity for the foreign key and one with the same name and an additional `_key` suffix for the map key. -You can change this name by implementing `NamingStrategy.getReverseColumnName(RelationalPersistentProperty property)` and `NamingStrategy.getKeyColumn(RelationalPersistentProperty property)`, respectively. +You can change this behavior by implementing `NamingStrategy.getReverseColumnName(RelationalPersistentProperty property)` and `NamingStrategy.getKeyColumn(RelationalPersistentProperty property)`, respectively. +Alternatively you may annotate the attribute with `@Column(value="your_column_name", keyColumn="your_key_column_name")` * `List` is mapped as a `Map`. diff --git a/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java b/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java index 8189fa722..2c5539840 100644 --- a/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java +++ b/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java @@ -73,7 +73,13 @@ class BasicRelationalPersistentProperty extends AnnotationBasedPersistentPropert Assert.notNull(context, "context must not be null."); this.context = context; - this.columnName = Lazy.of(() -> Optional.ofNullable(findAnnotation(Column.class)).map(Column::value)); + + this.columnName = Lazy.of(() -> Optional.ofNullable( // + findAnnotation(Column.class)) // + .map(Column::value) // + .filter(StringUtils::hasText) // + ); + this.keyColumnName = Lazy.of(() -> Optional.ofNullable( // findAnnotation(Column.class)) // .map(Column::keyColumn) // @@ -120,7 +126,7 @@ class BasicRelationalPersistentProperty extends AnnotationBasedPersistentPropert @Override public String getReverseColumnName() { - return context.getNamingStrategy().getReverseColumnName(this); + return columnName.get().orElseGet(() -> context.getNamingStrategy().getReverseColumnName(this)); } @Override diff --git a/src/main/java/org/springframework/data/relational/core/mapping/Column.java b/src/main/java/org/springframework/data/relational/core/mapping/Column.java index 7d89e2743..98b11d2f2 100644 --- a/src/main/java/org/springframework/data/relational/core/mapping/Column.java +++ b/src/main/java/org/springframework/data/relational/core/mapping/Column.java @@ -35,7 +35,7 @@ public @interface Column { /** * The mapping column name. */ - String value(); + String value() default ""; /** * The column name for key columns of List or Map collections. diff --git a/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java b/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java index 47b62c9f1..da8ebcea6 100644 --- a/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java +++ b/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java @@ -93,7 +93,7 @@ public class BasicRelationalPersistentPropertyUnitTests { .getRequiredPersistentEntity(DummyEntity.class) // .getRequiredPersistentProperty("someList"); - assertThat(listProperty.getColumnName()).isEqualTo("dummy_column_name"); + assertThat(listProperty.getReverseColumnName()).isEqualTo("dummy_column_name"); assertThat(listProperty.getKeyColumn()).isEqualTo("dummy_key_column_name"); }