hibernate - hibernate.implicit_naming_strategy 到默认值在 LocalSessionFactoryBean 中不起作用
问题描述
我创建了一个entityFactoryManager
bean,因为我正在做@EnableAutoConfiguration(exclude = HibernateJpaAutoConfiguration.class)
. 运行应用程序时出现错误,发现命名策略从snake_case更改为camel case。就我而言,我的属性userDetail
是因为表名userdetail
而不是user_detail
. 我尝试将休眠属性设置hibernate.implicit_naming_strategy
为jpa
ordefault
但它不起作用。我尝试了提供的物理实现,但没有运气。我认为我不应该更改任何休眠属性,因为它只是使用默认设置,假设自动配置这样做。
我一定在这里遗漏了一些东西。
休眠 5.4 春天 2.3
解决方案
该问题是由休眠属性名称和设置的值的组合引起的。
如果您实现自己的实体工厂,则将休眠属性设置为默认设置,该设置似乎与休眠的用户指南不匹配,例如我面临的问题,它似乎是唯一的一个。
由于我使用的是 @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 是一种反模式解决方法。
推荐阅读
- c# - 如何检查 2 个触发器是否会发生冲突?
- powershell - 流水线 Powershell cmdlet 显示部分结果?
- python - 遍历字典 即时更新值 Python3
- r - R不想安装包,我不能改变工作目录
- c - 如果指针可以转换为任何类型(在 c 中),为什么要使用 void 指针?
- python - 如果有可用空间,如何缩小外部 QWidget/顶级窗口?
- iis - 使用 Regex 重写规则在 IIS 上不起作用
- javascript - 如何在内部从事件侦听器调用类函数?
- android - CreateFragment 在通过按钮调用 viewPager.setCurrentItem 时调用了两次
- r - 如何用以行值为条件的转换值替换 R tibble 中某些列的特定行中的值?