簡體   English   中英

Hibernate:如何將自動生成的外鍵列名從小寫更改為大寫

[英]Hibernate : How to change the auto generated foreign key column name from lowercase to uppercase

我正在將舊的 spring 引導應用程序遷移到最新的 spring 引導 2.3.0

遷移成功,但是,當我嘗試將應用程序連接到現有數據庫時,由於大小寫問題,它無法識別自動生成的外鍵列。

舊版本中的外鍵列名稱為大寫字母,如下所示。 這里,FLAGCATEGORY_FLAGCATEGORYID 是由 hibernate 自動生成的外鍵列名

在此處輸入圖像描述

當我使用帶有 hibernate 5 的新 spring 引導版本時,它會生成小寫的外鍵列名。 由於這種差異,應用程序無法使用舊數據庫啟動。 有人可以建議我在不更改數據庫架構的情況下如何解決這個問題嗎? 在此處輸入圖像描述

這是新的外鍵表名的樣子。 外鍵列名現在有小寫字母在此處輸入圖像描述

您可以使用自己的列名而不是自動生成的列名,嘗試在您的 flagCategory getter 上添加此注釋:

@JoinColumn(name = "FLAGCATEGORY_FLAGCATEGORYID")

Hibernate使用PhysicalNamingStrategy合約將邏輯名稱解析為物理名稱。 默認實現是簡單地使用邏輯名稱作為物理名稱。

您可以定義自定義實現:

public class FooPhysicalNamingStrategy implements PhysicalNamingStrategy {

    // Changing the column names to upper case
    @Override
    public Identifier toPhysicalColumnName(Identifier identifier,
                                           JdbcEnvironment jdbcEnvironment) {
        
        return jdbcEnvironment
                .getIdentifierHelper()
                .toIdentifier(identifier.getText().toUpperCase(), identifier.isQuoted());
    }

    // Keeping as it is
    @Override
    public Identifier toPhysicalSchemaName(Identifier identifier, 
                                           JdbcEnvironment jdbcEnvironment) {
        
        return identifier;
    }

    // Other overridden methods    
}

並將hibernate.physical_naming_strategy設置設置為 class 的FQN或引用 class。

例如,將以下屬性添加到 persistence.xml 中的persistence.xml persistence-unit

<property name="hibernate.physical_naming_strategy" value="foo.bar.FooPhysicalNamingStrategy"/>

筆記

JPA 自省:

來自Hibernate 用戶指南

JPA沒有定義邏輯名稱和物理名稱之間的分隔。 遵循JPA規范,邏輯名稱物理名稱。 如果JPA提供程序可移植性很重要,應用程序不應該指定PhysicalNamingStrategy


延伸閱讀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM