我的spring boot项目是在实体类中使用JPA hibernate注释。我有自己的通用存储库,我是从JPA的entityManagerFactory获取Hibernate SessionFactory的NOT。当创建新的表和列时,就会出现该问题。在数据库中创建带下划线的Camel列。我在application.yml中将命名策略更改为org.hibernate.cfg.EJB3NamingStrategy,但没有修复任何问题。
application.yml:
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true
hibernate:
ddl-auto: update
naming-strategy: org.hibernate.cfg.EJB3NamingStrategy在我自己的通用存储库中获取hibernate会话(不使用EntityManager):
@Autowired
public SessionFactory sessionFactory;
public Session getSession() {
try {
return sessionFactory.getCurrentSession();
} catch (HibernateException e) {
System.out.println(e.getMessage().toString());
}
return sessionFactory.openSession();
}我曾经创建一个自定义的namingStrategy来扩展ImplicitNamingStrategyJpaCompliantImpl,但是什么也没发生!
怎么啦?
What I want:
在数据库中使用camel创建的列。甚至是桌子!
发布于 2017-01-29 16:07:33
对于Hibernate 5,您应该使用不同的属性:
spring.jpa.hibernate.naming.implicit-strategy= # Hibernate 5 implicit naming strategy fully qualified name.
spring.jpa.hibernate.naming.physical-strategy= # Hibernate 5 physical naming strategy fully qualified name.发布于 2019-08-27 19:55:29
如果您在实体类中提供@Table和@Column注释,并且名称带有下划线,例如 user_id ,即@Column(name="**user_id**"),它将采用user_id作为列名;如果您将其指定为userid,则如果您不使用策略或隐式策略(特别是user_id),则它将更改为spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl。因此,如果您想要将实体属性名称更改为具有下划线和小写字母的策略,例如,从userId到user_id,您应该使用隐式或无策略(实际上使用隐式策略)。
如果您不希望您的命名策略在列名或类名中添加下划线,那么您需要使用的策略应该是:spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl。您在注释@Table和@Column的name属性中提供的内容将保持不变。
如果您不想提供注释,而希望手动处理表名和列名,则应该扩展类org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl并覆盖所需的方法。如果您在这里的某些情况下仍然使用注释,请记住,覆盖的方法将应用于那些注释中编写的名称。spring.jpa.hibernate.naming.physical-strategy=example.CustomStrategy
发布于 2020-05-19 20:47:44
我使用的是Spring Data JPA 2.2.1,下面的配置适用于我
spring.jpa.properties.hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyhttps://stackoverflow.com/questions/41918622
复制相似问题