问题描述
自从我做entityFactoryManager
以来,我创建了一个@EnableAutoConfiguration(exclude = HibernateJpaAutoConfiguration.class)
bean。运行应用程序时,出现错误,发现命名策略从snake_case更改为camel case。就我而言,我的属性userDetail
是因为表名是userdetail
而不是user_detail
。我尝试将休眠属性hibernate.implicit_naming_strategy
设置为jpa
或default
,但是它不起作用。我尝试了提供的物理实现,但没有运气。我认为我不必更改任何休眠属性,因为只要使用自动配置,它就会使用默认设置。
我一定在这里想念东西。
休眠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是一种反模式的解决方法。