我尝试使用Sping Boot 和JPA将用户保存到数据库,但由于此错误,它对我不起作用。
com.microsoft.sqlserver.jdbc.SQLServerException:
Cannot insert explicit value for identity column in table 'Users'
when IDENTITY_INSERT is set to OFF.
- 错误 * 很清楚,所以我尝试在我的数据库中更改Identity插入,成功了,但错误仍然出现。第二个奇怪的问题是,我没有尝试将特定值作为id放入我的数据库。下面是负责保存数据的确切行:
userService.save(new User("wikimmax","test","testmail@op.pl","test", Arrays.asList(new Role("ROLE_USER"))));
这是我的User类
import javax.persistence.*;
import java.util.Collection;
@Entity
@Table(name = "Users",uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
private String firstName;
private String lastName;
private String email;
private String password;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(
name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(
name = "role_id", referencedColumnName = "id"))
private Collection<Role> roles;
public User() {
}
public User(String firstName, String lastName, String email, String password) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.password = password;
}
public User(String firstName, String lastName, String email, String password, Collection<Role> roles) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.password = password;
this.roles = roles;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Collection<Role> getRoles() {
return roles;
}
public void setRoles(Collection<Role> roles) {
this.roles = roles;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", password='" + "*********" + '\'' +
", roles=" + roles +
'}';
}
}
还有Is my表属性:
任何想法都是高度赞赏
UPDATE我设法打印了由Hibernate生成SQL查询,它看起来像这样:
insert
into
Users
(email, firstName, lastName, password, id)
values
(?, ?, ?, ?, ?)
2条答案
按热度按时间bjg7j2ky1#
请编辑问题并添加插入语句。
您不能在标识列中插入任何数据,因为此列由SQL引擎自动填充,请在
Insert
语句中删除id列,然后重试。或设置标识,但这不是个好主意。允许将显式值插入表的标识列。
例如:
gr8qqesn2#
添加以下代码: