当前位置: 首页 > 知识库问答 >
问题:

Spring boot JPA insert in TABLE with Hibernate,大写名称

越开畅
2023-03-14

我有一个表实体映射为:

@Entity
public class ItemsToRegister implements Serializable{

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

当我尝试在数据库中插入新记录时,表名以小写形式翻译为:items\u to\u register,但我的表名是items\u to\u register如何在不更改MySql配置的情况下修复我的问题?(我的cnf)

我的application.properties档案里有:

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

共有3个答案

廖君昊
2023-03-14

您需要使用tics(`)转义表名,使其区分大小写。

@Table(name = "`ITEMS_TO_REGISTER`")
韦望
2023-03-14

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

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

这告诉Hibernate生成与@Table(name=)或@Column(name=)中指定的相同的SQL。一切都很好。

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

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

那么生成的sql将是,

select employee0_.firstName,employee0_lastName from Employee employee0_;

不幸的是,这不是一个很好的选择,因为通常我们会将DB中的列定义为FIRST\u NAME和LAST\u NAME,表名定义为EMPLOYEE。如果没有使用PhysicalNamingStrategy,SQL就会

select employee0_.first_name,employee0_last_name from employee employee0_;

因此,这实际上是在以下两个选项之间进行选择。

  • 使用PhysicalStrategy,在带有@Table和@column注释的java代码中显式定义所有表名/列名
  • 在db中定义小写表名,让hibernate自动为我们生成表名/列名
赫连骏
2023-03-14

在hibernate 5上

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

在您的应用程序中。属性文件

 类似资料:
  • 问题内容: 是否应调用返回XML流的方法 或者 您对此有何看法?什么是最佳做法? 问题答案: 没有一个正确的答案。此Wiki摘录很有帮助: 编程标识符通常需要包含大写的首字母缩写词和首字母缩写,例如“旧HTML文件”。类似于标题大小写规则,自然的驼峰式大小写形式将全部以大写形式缩写,即“ oldHTMLFile”。但是,当两个首字母缩略词同时出现时(例如,“ parse DBM XML”将变为“

  • 我在PostgreSQL中有一个表: 我正在这个表上尝试Map,所以我使用了JPA注释(见下文)。这是我的: 最后,这是我的实体类: 如果我有这样的,我从PostgreSQL中得到消息 当我尝试转义引用时 我试过这个问题的回答,但不起作用 Spring boot JPA在表中插入带有Hibernate的大写字母名称 我一直在搜索改进的NamingStrategy,这似乎是spring boot中的

  • 本文向大家介绍thinkphp 表名 大小写 窍门,包括了thinkphp 表名 大小写 窍门的使用技巧和注意事项,需要的朋友参考一下 我们有一个表auth_group_access,那么如何使用呢? 在使用M方法时,对于带下划线的表名,可以采用如下方法。 M('AuthGroupAccess'); 对应sql语句SQL: SHOW COLUMNS FROM `auth_group_access`

  • 问题内容: 我在另一个列名称为的团队的Postgres中有一个db表说。现在,我试图使用PG指令在此列名上查询该表。 它只是返回 错误:列“ first_Name”不存在 不知道我是在做傻事还是对我遗失的问题有解决方法? 问题答案: 所有未加双引号的 标识符 (包括列名)在PostgreSQL中被折叠为小写。用双引号创建的列名并因此保留了大写字母(和/或其他语法违规),必须在余下的时间将双引号引起

  • 问题内容: 我有大量的格式文件,以及。 如何重命名这些文件,使它们全部为大写,而忽略名称的数字部分? 问题答案:

  • 问题内容: 如果一个人在不同目录中编写了两个具有相同的不区分大小写名称的公共Java类,则这两个类在运行时将不可用。(我在Windows,Mac和Linux上使用多个版本的HotSpot JVM进行了测试。如果还有其他同时可用的JVM,我也不会感到惊讶。)例如,如果我创建了一个名为类的类,则这样命名: 在我的网站上可以找到三个包含上面代码的Eclipse项目。 如果尝试,我像这样调用两个类: 类型

  • Linux、Solaris、BSD及其他类Unix操作系统使用的是大小写敏感的文件系统,而Windows和Mac OS X(默认安装)的文件系统则是大小写不敏感的文件系统。即用文件名README、readme以及Readme(混合大小写)进行访问,在Linux等操作系统上访问的是不同的文件,而在Windows和Mac OS X上则指向同一个文件。换句话说,两个不同文件README和readme在L

  • 我尝试设置我的JPA映射。由于某些原因,我必须有相同的java变量/表列名(包括大写字母),但我不能设置Hibernate。我尝试了明确的列名: 对于隐式映射: 这两种方法都创建不带大写字母的列名——“nextinvoicenr”。 我还试图改变Hibernate配置添加: 但没有成功