Spring boot JPA 使用 Hibernate 在 TABLE 中插入大写名称

新手上路,请多包涵

我有一个表实体映射为:

 @Entity
public class ItemsToRegister implements Serializable{

@Id
@Column(name = "ID_ITEM_TO_REGISTER")
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
.....

当我尝试在数据库中插入新记录时,表名以小写形式翻译为:items_to_register,但我的表名是 ITEMS_TO_REGISTER 如何在不更改 MySql 配置的情况下解决我的问题? (我的.cnf)

我的 application.properties 文件中有:

 spring.jpa.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy

原文由 carlj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 652
2 个回答

在休眠 5 上,它将是

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

在您的 application.properties 文件中。

原文由 jasonleakey 发布,翻译遵循 CC BY-SA 3.0 许可协议

正如@jasonleakey 建议的那样,我们可以考虑使用如下命名策略。

 spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

这告诉 Hibernate 生成与 @Table (name=” “) 或 @Column(name=” “) 中指定的完全一样的 SQL。一切安好。

但请记住 - 在实体类中使用不带 @Table、@Column 注释的 PhysicalNamingStrategy 时,hibernate 使用类名和变量名生成 SQL。考虑下面的java类

Class Employee {
   private String firstName;
   private String lastName;
}

那么生成的sql将是,

 select employee0_.firstName,employee0_lastName from Employee employee0_;

不幸的是,这不是一个很好的选择,因为通常我们会将 DB 中的列定义为 FIRST_NAME 和 LAST_NAME,将表名定义为 EMPLOYEE。如果您不使用 PhysicalNamingStrategy,SQL 将是

select employee0_.first_name,employee0_last_name from employee employee0_;

所以这真的是以下两个选项之间的选择。

  • 使用 PhysicalStrategy 并使用 @Table 和 @Column 注释在 java 代码中显式定义所有表名/列名。

或者 - 在db中定义小写的表名,让hibernate自动为我们生成表名/列名。

原文由 SekharKari 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题