建立和使用自定義 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.xml
或 hibernate.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
獲取其名稱。