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
遵循Spring推薦的命名約定。無論如何,如果你想完全控制物理命名,你最好使用org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
。您可以通過添加切換到命名策略下面你application.yml
:
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
註釋被忽略,表將創建爲user_connection
然後使彈簧社會有噓聲像契合。
的SpringPhysicalNamingStrategy
的apply
方法是瞭解這種行爲的關鍵在於:
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創造? –
也會很好,如果你添加你添加到sessionFactory的application.properties和proerties –