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