2013-10-02 89 views
7

我正在用Spring(Boot)构建一个REST webservice,并试图将hibernate用作orm mapper而没有任何xml配置。休眠命名策略

我基本上已经能够正常工作了,但是我遇到了一个配置问题。 我在@Configuration文件中将LocalContainerEntityManagerFactoryBean实例化为@Bean。 我设置hibernate.ejb.naming_strategy在下面的例子中 - >这似乎工作创建表,如果他们不存在(列名像camelCase像在我的@Entity类),但是当一个查询被执行,休眠“忘了“关于这个命名配置,并尝试使用另一种命名策略与under_score_attributes - >显然这些查询失败。我还需要设置其他任何财产吗?或者另一种配置属性的方式,最好是而不是添加一个cfg.xml或persistence.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(); 

回答

22

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

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

是的,谢谢。这看起来是正确的做法! – Alex

+0

但我在哪里可以找到这些属性的文档? – Alex

+0

并回答我的评论:https://github.com/spring-projects/spring-boot/blob/master/docs/application.yml这是非常有用的...对于所有自动配置属性 – Alex

0

您是否尝试过使用编程属性设置此特定属性?或者在软件包根目录下有一个hibernate.properties文件?或者一个JVM系统属性?全部被描述为here

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

-2

我现在得到了解决方案。

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

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

+0

这相当于失败了使用Spring Boot的目的。请参阅下面的答案。 –