TL; DR
dodać następujące do pliku application.yml
:
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Lub application.properties
:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
szczegółową odpowiedź
Jako wiosennej Boot 1.4 release notes stany:
SpringNamingStrategy
nie jest już używany jako Hibernuj 5.1 usunął obsługę dla starego interfejsu NamingStrategy
. Nowy SpringPhysicalNamingStrategy
jest teraz skonfigurowany automatycznie, który jest używany w kombinacji z domyślnym ImplicitNamingStrategy
Hibernate. Ten powinien być bardzo bliski (jeśli nie identyczny) do domyślnych ustawień Spring Boot 1.3 , jednak podczas aktualizacji należy sprawdzić, czy schemat bazy danych jest poprawny .
Ten nowy PhysicalNamingStrategy
jest zgodny z zalecanymi konwencjami nazewnictwa Spring. W każdym razie, jeśli chcesz mieć całkowitą kontrolę nad fizycznym nazywaniem, lepiej jest korzystać z org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
. można przełączyć się na tej strategii nazewnictwa przez dodanie następujących do Twojego application.yml
:
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Adnotacja jest ignorowany, a tabela jest tworzona jako user_connection
które następnie powoduje Wiosna Social mieć hissy dopasowanie.
apply
metoda SpringPhysicalNamingStrategy
jest kluczem do zrozumienia tego zachowania:
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);
}
To w zasadzie zastępuje wszelkie .
oraz sprawa zmiany (Spójrz na isUnderscoreRequired
metody), z podkreśleniem.
jaki sposób skonfigurować automatyczne tworzenie ddl? –
również byłby dobry, gdyby dodać właściwości application.properties i właściwości dodane do obiektu sessionFactory –