创建自定义项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。