我需要將表前綴應用于 Gorm/Hibernate 創建的所有資料庫表。
在以前的 Grails 版本中,這可以通過使用 hibernate 配置中的 'naming_strategy' 屬性和使用自定義類來實作。使用 Hibernate5,這不再有效,并且任何自定義命名類似乎都被完全忽略了。
我試圖通過 application.yml、application.groovy 甚至環境屬性來實體化和設定這些類,因為所有這些方法都可以在純 Spring Boot 中作業,但是 Grails 似乎覆寫了我指定的任何設定。
有沒有人遇到過同樣的問題并發現了如何實作這一點?
我的自定義類的一個簡單示例如下:
class CustomNamingStrategy extends PhysicalNamingStrategyStandardImpl {
@Override
Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
return "customprefix_" name
}
}
以及指定命名策略的示例:
spring:
jpa:
properties:
hibernate:
physical_naming_strategy: tableprefix.CustomNamingStrategy
hibernate:
naming:
physical-strategy: tableprefix.CustomNamingStrategy
physical_naming_strategy: tableprefix.CustomNamingStrategy
hibernate:
physical_naming_strategy: tableprefix.CustomNamingStrategy
我有一個域 Customer,并且在每種情況下,創建的表名始終是“customer”,而不是我想要實作的“customprefix_customer”。
uj5u.com熱心網友回復:
在我的特殊情況下,答案是自定義策略類的宣告方式。
在 v2 中,在 config.groovy 中,命名策略是實體化一個新類,利用它的建構式,即
命名策略 = 新 myPackage.MyCustomStrategy('table_prefix')
這允許在不同的“環境”塊中使用不同的表前綴。
似乎不再允許這樣做,您必須單獨指定類名...即現在可以使用...
命名策略 = myPackage.MyCustomStrategy
但是,使用這種方法,您不能使用建構式來傳遞任何值,因此在我的情況下,我在配置中設定了一個附加變數來說明表前綴,并且在 MyCustomStrategy 類中,我正在閱讀配置值。
問題解決了.. 但是我不確定如前所述多久,這個naming_strategy 策略已被棄用并且Hibernate 建議它應該被PhysicalNamingStrategy 和ImplicitNamingStrategy 取代,希望Grails 團隊將允許在即將發布的版本中指定這些。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/445649.html
