[英]Can't automatically obtain ID for a record in database
我的实体是:
@Entity(name = "studios")
public class Studio {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "studio_id", nullable = false)
private Integer id;
private String name;
private String phone;
private String url;
public Studio() {
}
public Studio(String name, String phone, String url) {
this.name = name;
this.phone = phone;
this.url = url;
}
public String getUrl() {
return url;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
}
将记录写入数据库的方法。 我只想将它发送到数据库并自动为该表中的每条记录获取一个 ID,但每次我这样做时 - “status”:500,“error”:“Internal Server Error”。 表中没有任何变化。
@Override
public Studio save(Studio studio) {
final String SQL_INSERT = "insert into studios values (?, ?, ?)";
jdbcTemplate.update(
con -> {
PreparedStatement preparedStatement = con.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, studio.getName());
preparedStatement.setString(2, studio.getPhone());
preparedStatement.setString(3, studio.getUrl());
try (ResultSet generatedKeys = preparedStatement.getGeneratedKeys()) {
if (generatedKeys.next()) {
studio.setId(generatedKeys.getInt(1));
}
else {
throw new SQLException("Creating user failed...");
}
}
return preparedStatement;
}
);
return studio;
}
我的表是:
CREATE TABLE "studios" (
"studio_id" serial NOT NULL UNIQUE ,
"name" varchar(128) NOT NULL UNIQUE,
"url" varchar(255) NOT NULL,
"phone" varchar(12) NOT NULL,
CONSTRAINT "studios_pk" PRIMARY KEY ("studio_id")
);
为什么它不起作用?
您需要在插入语句中指定要填充的列。 使用没有显式列的插入总是一个坏主意,因为关于列顺序的假设可能是错误的,但在这种情况下,它会导致插入失败,因为您的插入指定了三个值,而表有四个列(studio_id,名称,url,电话)。
您需要使用:
insert into studios (name, phone, url) values (?, ?, ?)
顺便说一句,即使您的表只有三个,无列插入也会产生错误的结果:您在订单名称、电话、url 中设置,而您的表定义具有订单名称、url、电话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.