【发布时间】:2018-04-21 18:24:56
【问题描述】:
我正在尝试使用带有 JPA 的 Spring Boot 来学习一些 API 开发,并且我在数据库中有这个表,其中 id 列指定为具有自动增量的主键。当我提交数据时,我不断收到此错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'Id', table
在我的课堂上,我有这个作为 id。你可能会说为什么@Column(name='Id')。我在进行故障排除时开始添加它。当我从表中读取信息时,在进行一些更改之后,代码仍然可以正常工作。
package com.FUT.track.web.FUTtrackapplication.squads;
import javax.persistence.*;
@Entity
@Table(name="Squads")
public class Squad {
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@Column(name ="Id", nullable = false, unique = true)
public int id;
public String squadName;
public String squadDescription;
public String primaryFormation;
public Squad() {
}
public Squad(int id, String squadName, String squadDescription, String
primaryFormation) {
super();
this.id = id;
this.squadName = squadName;
this.squadDescription = squadDescription;
this.primaryFormation = primaryFormation;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSquadName() {
return squadName;
}
public void setSquadName(String squadName) {
this.squadName = squadName;
}
public String getSquadDescription() {
return squadDescription;
}
public void setSquadDescription(String squadDescription) {
this.squadDescription = squadDescription;
}
public String getPrimaryFormation() {
return primaryFormation;
}
public void setPrimaryFormation(String primaryFormation) {
this.primaryFormation = primaryFormation;
}
}
不确定是否需要@GeneratedValue( strategy = GenerationType.IDENTITY),但不管有没有它,我仍然会遇到同样的错误。我正在提交除 id 之外的所有字段的数据。所有其他字段都可以存储空值,因此即使没有提交任何内容,我认为应该为新列生成 id。但由于某种原因,它不起作用。
也在我的应用程序属性文件中:
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
有什么建议吗?
【问题讨论】:
-
IDENTITY 表示您的数据库列是 IDENTITY 类型(任何 JPA 文档都会告诉您这一点),并将在 INSERT 上分配。当您持久化记录发布时,发出的 SQL 是什么。这是了解为什么会这样的第一步。也就是调试
标签: java sql-server api jpa spring-boot