创建和使用自定义 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
获取其名称。