建立和使用自定義 ImplicitNamingStrategy

建立自定義 ImplicitNamingStrategy 允許你調整 Hibernate 如何為非顯式命名的 Entity 屬性分配名稱,包括外來鍵,唯一鍵,識別符號列,基本列等。

例如,預設情況下,Hibernate 將生成雜湊的外來鍵,類似於:

FKe6hidh4u0qh8y1ijy59s2ee6m

雖然這通常不是問題,但你可能希望該名稱更具描述性,例如:

FK_asset_tenant

這可以通過自定義 ImplicitNamingStrategy 輕鬆完成。

這個例子擴充套件了 ImplicitNamingStrategyJpaCompliantImpl ,但如果你願意,你可以選擇實現 ImplicitNamingStrategy

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.ImplicitForeignKeyNameSource;
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;

public class CustomNamingStrategy extends ImplicitNamingStrategyJpaCompliantImpl {

    @Override
    public Identifier determineForeignKeyName(ImplicitForeignKeyNameSource source) {
        return toIdentifier("FK_" + source.getTableName().getCanonicalName() + "_" + source.getReferencedTableName().getCanonicalName(), source.getBuildingContext());
    }

}

要告訴 Hibernate 使用哪個 ImplicitNamingStrategy,請在 persistence.xmlhibernate.cfg.xml 檔案中定義 hibernate.implicit_naming_strategy 屬性,如下所示:

<property name="hibernate.implicit_naming_strategy"
                  value="com.example.foo.bar.CustomNamingStrategy"/>

或者你可以在 hibernate.properties 檔案中指定屬性,如下所示:

hibernate.implicit_naming_strategy=com.example.foo.bar.CustomNamingStrategy

在此示例中,所有沒有明確定義 name 的外來鍵現在將從 CustomNamingStrategy 獲取其名稱。