首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Hibernate 5命名策略+ spring boot +注释

更改Hibernate 5命名策略+ spring boot +注释
EN

Stack Overflow用户
提问于 2017-01-29 15:32:15
回答 4查看 13.7K关注 0票数 2

我的spring boot项目是在实体类中使用JPA hibernate注释。我有自己的通用存储库,我是从JPA的entityManagerFactory获取Hibernate SessionFactory的NOT。当创建新的表和列时,就会出现该问题。在数据库中创建带下划线的Camel列。我在application.yml中将命名策略更改为org.hibernate.cfg.EJB3NamingStrategy,但没有修复任何问题。

application.yml:

代码语言:javascript
复制
 jpa:
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect 
    show-sql: true 
    hibernate:
        ddl-auto: update 
        naming-strategy: org.hibernate.cfg.EJB3NamingStrategy

在我自己的通用存储库中获取hibernate会话(不使用EntityManager):

代码语言:javascript
复制
@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创建的列。甚至是桌子!

EN

回答 4

Stack Overflow用户

发布于 2017-01-29 16:07:33

对于Hibernate 5,您应该使用不同的属性:

代码语言:javascript
复制
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.

正如你在这里看到的:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties

票数 4
EN

Stack Overflow用户

发布于 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。因此,如果您想要将实体属性名称更改为具有下划线和小写字母的策略,例如,从userIduser_id,您应该使用隐式或无策略(实际上使用隐式策略)。

如果您不希望您的命名策略在列名或类名中添加下划线,那么您需要使用的策略应该是:spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl。您在注释@Table@Columnname属性中提供的内容将保持不变。

如果您不想提供注释,而希望手动处理表名和列名,则应该扩展类org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl并覆盖所需的方法。如果您在这里的某些情况下仍然使用注释,请记住,覆盖的方法将应用于那些注释中编写的名称。spring.jpa.hibernate.naming.physical-strategy=example.CustomStrategy

票数 2
EN

Stack Overflow用户

发布于 2020-05-19 20:47:44

我使用的是Spring Data JPA 2.2.1,下面的配置适用于我

代码语言:javascript
复制
spring.jpa.properties.hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41918622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档