TL; DR
Добавить следующую строку в ваш application.yml
файл:
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Или ваш application.properties
:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
развернутый ответ
В Spring ботинке 1.4 release notes состояния:
SpringNamingStrategy
больше не используется, так как Hibernate 5.1 удалил поддержка старого интерфейса NamingStrategy
. Новый SpringPhysicalNamingStrategy
теперь автоконфигурирован, который используется в комбинации с Hibernate по умолчанию ImplicitNamingStrategy
. Этот должен быть очень близок к (если не идентичен) параметру Spring Boot 1.3 по умолчанию, однако вы должны проверить правильность схемы вашей базы данных при обновлении.
Этот новый PhysicalNamingStrategy
следует принципам условного обозначения имен, рекомендованных по весеннему времени. В любом случае, если вам нужен полный контроль над физическим наименованием, вам лучше использовать org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
. Вы можете перейти к этой стратегии именования, добавив следующую строку в ваш application.yml
:
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
аннотации игнорируются, а таблица создаются как user_connection
, которая затем вызывает Spring Social иметь hissy подгонку.
apply
метод SpringPhysicalNamingStrategy
является ключом к пониманию такого поведения:
private Identifier apply(Identifier name, JdbcEnvironment jdbcEnvironment) {
if (name == null) {
return null;
}
StringBuilder builder = new StringBuilder(name.getText().replace('.', '_'));
for (int i = 1; i < builder.length() - 1; i++) {
if (isUnderscoreRequired(builder.charAt(i - 1), builder.charAt(i),
builder.charAt(i + 1))) {
builder.insert(i++, '_');
}
}
return getIdentifier(builder.toString(), name.isQuoted(), jdbcEnvironment);
}
private boolean isUnderscoreRequired(char before, char current, char after) {
return Character.isLowerCase(before) && Character.isUpperCase(current)
&& Character.isLowerCase(after);
}
Это в основном заменяет любые .
и тематические изменения (взгляните на isUnderscoreRequired
метод) с подчеркиванием.
Как настроить свое создание авто DDL? –
также было бы неплохо, если бы вы добавили приложения application.properties и proerties, которые вы добавляете в sessionFactory. –