Hibernate命名策略

时间:2013-10-02 20:28:34

标签: spring hibernate hibernate-annotations spring-boot

我正在使用Spring(Boot)构建一个REST Web服务,并尝试将hibernate用作orm mapper,而不使用任何xml配置。

我基本上可以使用它,但我遇到了配置问题。 我在@Configuration文件中将LocalContainerEntityManagerFactoryBean实例化为@Bean

我设置hibernate.ejb.naming_strategy,如下例所示 - >这似乎适用于创建表,如果它们不存在(列名称像我的@Entity类中的camelCase)但是当执行查询时,hibernate“忘记”关于此命名配置并尝试使用另一种命名策略under_score_attributes - >显然这些查询失败了。我需要设置其他任何属性吗?

或者另一种配置属性的方法,最好是,不用添加cfg.xmlpersistence.xml

LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();   
Properties props = new Properties();
props.put("hibernate.hbm2ddl.auto", "create");
props.put("hibernate.ejb.naming_strategy","org.hibernate.cfg.DefaultNamingStrategy");
lef.setJpaProperties(props); 
lef.afterPropertiesSet();

3 个答案:

答案 0 :(得分:22)

HibernateJpaAutoConfiguration允许通过本地外部配置设置命名策略(以及所有其他JPA属性)。例如,在application.properties

spring.jpa.hibernate.ddl_auto: create
spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy

答案 1 :(得分:0)

您是否尝试过使用程序化属性设置此特定属性?或者包根目录中的hibernate.properties文件?还是JVM系统属性?所有内容均为here

根据我的经验,如果您坚持不使用任何XML(这也是我的偏好),有时很难诊断Hibernate问题。如果没有别的办法,你可能会被迫至少定义一个配置文件。

答案 2 :(得分:-2)

我现在得到了解决方案。

@EnableAutoConfiguration(exclude={HibernateJpaAuto Configuration.class}) 

必须排除JpaAutoConfiguration。我仍然认为这可能是一个错误,因为通常它应该在我使用自己的@Configuration时自动“退缩”。