将hibernate.implicit_naming_strategy设置为默认值在LocalSessionFactoryBean中不起作用

问题描述

自从我做entityFactoryManager以来,我创建了一个@EnableAutoConfiguration(exclude = HibernateJpaAutoConfiguration.class) bean。运行应用程序时,出现错误,发现命名策略从snake_case更改为camel case。就我而言,我的属性userDetail是因为表名是userdetail而不是user_detail。我尝试将休眠属性hibernate.implicit_naming_strategy设置为jpadefault,但是它不起作用。我尝试了提供的物理实现,但没有运气。我认为我不必更改任何休眠属性,因为只要使用自动配置,它就会使用认设置。

我一定在这里想念东西。

休眠5.4 春天2.3

解决方法

此问题是由休眠属性名称和设置的值组合引起的。

如果实现自己的实体工厂,则将hibernate属性设置为默认设置,该设置似乎与hibernate的用户指南(例如我所面临的问题)不匹配,并且似乎是唯一的一个。

由于我使用@EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.class}),因此用于休眠设置的application.properties不再适用。下面是不必要的,因为默认情况下通过自动配置,这是蛇形情况。许多人还提到了下面的解决方案,以使其可以与蛇案一起使用。

spring.jpa.hibernate.naming.implicit-strategy = org.springframework.boot.orm.jpa.hibernate.SpringImplicityNamingStrategy spring.jpa.hibernate.naming.physical-strategy = org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

忽略了“ hibernate.naming.physical-strategy”是要设置的属性名称,但是在属性类中设置时并非如此,必须将hibernate属性设置为“ hibernate.physical-strategy”

另一个问题是属性值。我来自休眠的文档。

隐式:默认,jpa,org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl 物理:org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

对此。

隐含性:org.springframework.boot.orm.jpa.hibernate.SpringImplicityNamingStrategy 物理:org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

我觉得休眠的实现可能与jpa的实现不同。我使用休眠模式设置什么值都没关系,它不起作用。设置SpringPhysicalNamingStrategy可以解决此问题。 SpringImplicityNamingStrategy也不做任何事情。

我遇到的另一个问题是延迟加载的行为不同,但是hibernate.enable_lazy_load_no_trans是一种反模式的解决方法。