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