【问题标题】:Hibernate, SQL Server 2016 = SQL Error: 207 - Invalid column name休眠,SQL Server 2016 = SQL 错误:207 - 无效的列名
【发布时间】:2018-06-13 02:55:05
【问题描述】:

我的问题是我在 SQL Server 2016 中有 2 个架构,但使用相同的表。我已经更改了两者,并分别添加了 3 个相同的列。但是当hibernate想要向这个改变的表中添加新数据时,它给了我一个例外

Caused by: java.sql.SQLException: Invalid column name 'claim_number'.

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

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

有什么想法吗?

【问题讨论】:

  • 请显示您是如何添加新数据的?
  • 你可以在“@Column”之前添加“@id”
  • 我正在使用 Spring Data JPA 存储库插入数据,是的,这个实体有一个 @Id。

标签: java sql-server hibernate


【解决方案1】:

问题#1:

原因:java.sql.SQLException: Invalid column name '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

注意:为了检查错误,您可以在 application.properties 文件中添加以下属性。它将在控制台中显示 sql,您可以做出决定。所以请添加:

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

问题#2:

原因:java.sql.SQLException: Invalid column name 'claimnumber'。

问题分析:

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

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

解决方案#2:

有时开发人员会创建一个表,其中的列仅包含小写字符串。那个时候我们需要使用hibernate的另一种命名策略。

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

【讨论】:

  • 抱歉,差不多 2 年前了,我不记得我是如何解决这个问题的,所以我无法标记你的答案。
  • @egzaell 实际上我遇到了同样的错误并修复了这个问题。我进行了一些研发并得到了这两种方法来解决这个问题。所以我在这里分享我的知识。
【解决方案2】:

这个问题与 Spring Boot + Hibernate + SQL Server 类似。 检查解决方案,看看是否可以应用类似的方法。

Hibernate @Column annotation not work

【讨论】:

  • 谢谢,但这是新的东西,我在一个大型应用程序中工作,问题在于这些新列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2018-08-08
  • 1970-01-01
相关资源
最近更新 更多