Hibernate,SQL Server 2016 = SQL错误:207 - 无效的列名

3
我的问题是我在SQL Server 2016中有两个模式,但有相同的表。我已经修改了两个模式,并且每个都添加了3个相同的列。但当Hibernate要向这些修改后的表添加新数据时,它会给我一个异常。
Caused by: java.sql.SQLException: Invalid column name 'claim_number'.

是的,列的名称与@column中添加的名称相匹配。

@Column(name = "claim_number", nullable = true, length = 30)
private String claimNumber;

有什么想法吗?

1
请展示你是如何添加新数据的? - Hadi J
你可以在 "@Column" 前面加上 "@id"。 - OcelotcR
我正在使用Spring Data JPA存储库插入数据,是的,这个实体有@Id。 - egzaell
2个回答

2

问题#1:

错误原因: java.sql.SQLException: 无效的列名 'claim_number'。

问题分析:

如果我们检查该列名,我们会发现:

i) 它包含下划线("_")。

解决方案#1:

Hibernate使用各种类型的命名策略。如果该列包含下划线,则需要使用以下命名策略。

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

N.B:如果要检查错误,您可以在 application.properties 文件中添加以下属性。它将在控制台中显示 SQL,您可以做出决策。因此,请添加它:

# Show or not log for each sql query
spring.jpa.show-sql = true.

问题#2:

导致原因:java.sql.SQLException: 'claimnumber'无效的列名。

问题分析:

如果我们检查列名,会发现:

i)它包含小写字符串。没有下划线。

解决方案#2:

有时开发人员创建了一个只包含小写字符串的列的表。这时,我们需要使用另一种hibernate的命名策略。

# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

抱歉,这已经是两年前的事了,我不记得我是如何解决这个问题的,所以我不能标记你的答案。 - egzaell
1
@egzaell事实上,我遇到了相同的错误并解决了这个问题。我做了一些研究,找到了两种方法来解决这个问题。所以我在这里分享我的知识。 - SkyWalker

0
这个问题类似于Spring Boot、Hibernate和SQL Server的问题。请检查解决方案,看看您是否可以应用类似的方法。 Hibernate @Column注释不起作用

谢谢,但这是新东西,我正在开发一个大型应用程序,问题只出现在这些新列上。 - egzaell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接