在Hibernate 5中实现NamingStrategy(使自动生成的列名称为UPPERCASE)
我需要让Hibernate从实体开始自动生成数据库,但是我希望它们都是UPPERCASE。
这曾经在过去工作,现在我用大写和小写字母弄乱了列名。
我启用了
.setProperty("hibernate.hbm2ddl.auto", "create")
让Hibernate自动生成数据库,我创建了一个扩展org.hibernate.cfg.ImprovedNamingStrategy的UppercaseNamingStrategy.java。
根据https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html_single/#configuration-namingstrategy
现在我应该
您可以在添加映射之前通过调用Configuration.setNamingStrategy()来指定其他策略:
SessionFactory sf = new Configuration() .setNamingStrategy(ImprovedNamingStrategy.INSTANCE) .addFile("Item.hbm.xml") .addFile("Bid.hbm.xml") .buildSessionFactory();
org.hibernate.cfg.ImprovedNamingStrategy是一个内置策略,可能是某些应用程序的有用起点。
然而,在Hibernate 5.0.6中似乎没有更多的Configuration.setNamingStrategy()。
我当然喜欢以编程方式(我没有.xml配置文件而不想要它们)。
注意:
运用
.setProperty(“hibernate.ejb.naming_strategy”,“my.project.hibernate.UppercaseNamingStrategy”)
不起作用,似乎完全被忽略了……
Hibernate 5使用两个新接口来实现名称策略PhysicalNamingStrategy
和ImplicitNamingStrategy
。 您只需要实现PhysicalNamingStrategy
。 在为模型创建所有列名后,由Hibernate调用它。 所以你可以把它做成大写。 Hibernate默认使用PhysicalNamingStrategyStandardImpl
,它什么都不做。 你可以扩展它
public class UpperCaseNamingStrategy extends PhysicalNamingStrategyStandardImpl { @Override public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) { return context.getIdentifierHelper().toIdentifier( StringUtils.upperCase(name.getText(), Locale.ENGLISH)); } }
您可以通过这种方式使用UpperCaseNamingStrategy
构建会话工厂
Configuration configuration = new Configuration(); configuration.setPhysicalNamingStrategy(new UpperCaseNamingStrategy()); SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
我现在正在制定一个更复杂的名称策略。 如果您有兴趣,可以参考Hibernate5NamingStrategy 。
- 每个实体hibernate两个表
- Hibernate未知实体(不缺少@Entity或导入javax.persistence.Entity)
- Hibernate 4未设置’hibernate.dialect’时,对DialectResolutionInfo的访问不能为空
- 如何使用hibernate将多行插入数据库?
- JPA @TableGenerator在多个实体之间共享
- JPA / Hibernate:对于复合主键,@ IdClass或@EmbeddedId实现有什么好处?为什么?
- 如何在Spring / EJB / Mockito …代理上处理内部调用?
- 使用SequenceGenerator的javax.persistence.EntityExistsException
- 找不到hibernate.cfg.xml