hibernate 创建和使用自定义的隐式命名策略

示例

创建自定义项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());
    }

}

要告诉HibernateImplicitNamingStrategy使用哪个,请hibernate.implicit_naming_strategy在您的persistence.xml或  hibernate.cfg.xml文件中定义属性,如下所示:

<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。