這很奇怪。
我正在使用 spring.jpa.generate-ddl=true 在我的資料庫中創建表。當 spring 這樣做時,表名是蛇形的。例如,表MyClass變為my_class。
接下來,我使用以下代碼從 Hibernate 匯出模式: Export schema from Hibernate
當我呼叫代碼時,生成的 sql 的表名采用駝峰式,首字母大寫。所以,表MyClass為MyClass。
為什么它們會產生不同的結果?我如何讓它們相同?
uj5u.com熱心網友回復:
表名不同是因為 Spring 將 Hibernate 配置為使用不同的命名策略。命名策略定義了 Hibernate 如何生成屬性或物體的邏輯名稱以及如何將它們映射到資料庫中的物理名稱。我在我的博客上的命名策略指南中更詳細地解釋了這一點。
您有多種選擇來確保您的兩個設定都使用相同的命名策略:
如果您使用的是 Hibernate 版本 >= 5.5.4,則可以將其配置為使用CamelCaseToUnderscoresNamingStrategy. 這是 Spring 默認使用的:
<persistence>
<persistence-unit name="my-persistence-unit">
...
<properties>
...
<property name="hibernate.physical_naming_strategy"
value="org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy"/>
</properties>
</persistence-unit>
</persistence>
如果您使用的是較舊的 Hibernate 版本,您可能希望將 Spring 的命名策略更改為 Hibernate 的默認策略。您可以通過在 application.properties 檔案中設定以下屬性來做到這一點:
spring.jpa.properties.hibernate.implicit_naming_strategy=default
如果您使用的是較舊的 Hibernate 版本并希望使用 Spring 的命名策略,則必須實作自定義命名策略。這并不復雜,我在我的博客文章中解釋了如何做到這一點,但我會選擇前面提到的解決方案之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/439925.html
