我正在使用Spring(Boot)构建一个REST Web服务,并尝试将hibernate用作orm mapper,而不使用任何xml配置。
我基本上可以使用它,但我遇到了配置问题。
我在@Configuration文件中将LocalContainerEntityManagerFactoryBean
实例化为@Bean
。
我设置hibernate.ejb.naming_strategy
,如下例所示 - >这似乎适用于创建表,如果它们不存在(列名称像我的@Entity类中的camelCase)但是当执行查询时,hibernate“忘记”关于此命名配置并尝试使用另一种命名策略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();
答案 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时自动“退缩”。