Как настроить NamingStrategy для Spring Data JDBC - PullRequest
0 голосов
/ 16 ноября 2018

как настроить JDBC Spring Data NamingStrategy, чтобы он вел себя как PhysicalNamingStrategy?
Hibernate? У меня есть следующая сущность:

/**
 * Campus domain model class.
 * Handles information about campus.
 *
 * @author thomas.lang@th-deg.de
 */
@Data
@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__(@PersistenceConstructor))
public class Campus {

    private final @Id
    @Wither
    long campusId;

    @NotNull
    @Size(min = 3)
    private String campusName;

    /**
     * Creates a new campus.
     *
     * @param campusName
     */
    public Campus(@NonNull String campusName) {
        this.campusId = 0;
        Assert.hasLength(campusName, "A valid value has to be provided for Campus!");
        this.campusName = campusName;
    }

}

Когда я хочу, чтобы JDBC сохранил запись теста, он генерирует этот sql:
[INSERT INTO campus (campus_name) VALUES (?)]

В моей существующей базе данных есть столбец с именем campusname

Я прочитал в документе здесь https://docs.spring.io/spring-data/jdbc/docs/1.0.2.RELEASE/reference/html/#jdbc.entity-persistence.naming-strategy, что я могу настроить стратегию именования, но я не знаю, как:)

Спасибо за вашу помощь! С уважением! Томас

Решение:

/**
     * Naming strategy for naming entity columns
     * @see <a href="https://stackoverflow.com/questions/53334685/how-to-tweak-namingstrategy-for-spring-data-jdbc/53335830#53335830">How to implement {@link NamingStrategy}</a>
     *
     * @return PhysicalNamingStrategy
     */
    @Bean
    public NamingStrategy namingStrategy() {
        return new NamingStrategy() {
            @Override
            public String getColumnName(RelationalPersistentProperty property) {
                Assert.notNull(property, "Property must not be null.");
                return ParsingUtils.reconcatenateCamelCase(property.getName(), "");
            }
        };
    }

1 Ответ

0 голосов
/ 16 ноября 2018

Создайте bean-компонент типа NamingStrategy в контексте приложения и реализуйте его методы по своему усмотрению.

Метод, который необходимо переопределить, - getColumnName(RelationalPersistentProperty)

...