首先,您不需要
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
因为它什么也不做,因此默认为Hibernate使用。
Hibernate 5没有您想要的策略。所有策略均符合JPA(生成名称,如
AppUser)。因此,您需要实现自己的。
例如,物理命名策略
public class UnderscorePhysicalStartegy extends PhysicalNamingStrategyStandardImpl { @Override public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) { return context.getIdentifierHelper() .toIdentifier(NamingStrategyUtils.classToname(name.getText())); }}它使用NamingStrategyUtils。
请记住,如果您指定一个明确的名称
@Entity@Table(name = "AppUser")public class AppUser {}无论如何,您将有一个表名
app_user。如果您不希望这种行为,请使用隐式命名策略。
我做了一些有关命名策略的研究。您可以引用Hibernate5NamingStrategy,它会生成带有下划线的表和列名称(如您所需要的)和约束名称(唯一,外键)。
此类用于生成名称:HibernateNamingStrategy。
如何使用Hibernate5NamingStrategy
可以使用StrategyOptions配置命名策略。
例如,要使用不带前缀(例如
f_)的策略:
StrategyOptions options = StrategyOptions.builder().withoutPrefixes().build();Hibernate5NamingStrategy strategy = new Hibernate5NamingStrategy(options);
其他示例:Hibernate 5隐式命名策略
除此之外,Hibernate 5的改进的NamingStrategy可以用来模拟Hibernate
4的行为
ImprovedNamingStrategy。



