JPA中列名中的'.'(点)
JPA中列名中的'.'(点)
我有一个使用JPA实体和SQL Server 2012视图的Spring Boot应用程序(REST API)。在该视图中,我有一列S.N.
。当运行Spring Boot应用程序并访问该实体(通过API)时,我会收到以下错误:o.h.engine.jdbc.spi.SqlExceptionHelper : Invalid column name '`s_n` '.
我尝试使用反引号来转义注释,以及将列名放在引号中:@Column(name="[`S.N` ]") @Column(name="\"S.N.\"")
请注意,由于我无法控制数据库,所以目前无法更改列名。
JPA '.'(dot) in column name的问题是指当使用JPA进行数据库操作时,如果数据库表的列名中包含了'.'(点号),就会导致错误。下面我们来分析一下这个问题的产生原因以及解决方法。
问题产生的原因是JPA在生成SQL语句时,默认会将实体类的属性名和数据库表的列名进行映射。当数据库表的列名中包含'.'(点号)时,JPA会将点号解析为属性的嵌套关系,从而导致生成的SQL语句出错。
为了解决这个问题,我们可以在项目的配置文件application.properties中添加以下配置:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
这个配置的作用是使用Hibernate的物理命名策略来处理数据库表的命名。通过设置这个配置,JPA将直接使用数据库表的列名,而不再解析点号。
这个解决方法是从Stack Overflow上的一个回答中获取的,具体链接如下:
https://stackoverflow.com/a/48442812/8277643
通过添加以上配置,我们可以解决JPA '.'(dot) in column name的问题,确保数据库表的列名中可以包含'.'(点号)而不会导致错误。