首页 > 解决方案 > hibernate.implicit_naming_strategy 到默认值在 LocalSessionFactoryBean 中不起作用

问题描述

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

我一定在这里遗漏了一些东西。

休眠 5.4 春天 2.3

标签: hibernatespring-data-jpa

解决方案


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

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

由于我使用的是 @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.physical-strategy”

另一个问题是财产价值。我从hibernate的文档中去了..

隐式:默认,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

我感觉hibernate的实现可能与jpa的不同。我使用休眠设置的值无关紧要,它不起作用。设置 SpringPhysicalNamingStrategy 解决了这个问题。SpringImplicityNamingStrategy 也不做任何事情。

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


推荐阅读