无法自动获取数据库中记录的 ID

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;
    }

}

向数据库写入记录的方法。我只想将它发送到数据库并自动获取此 table 中每条记录的 ID,但每次我这样做时 - “status”:500,“error”:“Internal Server Error”。 table.

没有任何变化
@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;
}

我的table是:

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")
);

为什么它不起作用?

您需要在插入语句中指定要填充的列。使用没有显式列的插入总是一个坏主意,因为关于列顺序的假设可能是错误的,但在这种情况下,它会导致插入失败,因为您的插入指定了三个值,而 table 有四个列(studio_id, 姓名, url, phone).

您需要使用:

insert into studios (name, phone, url) values (?, ?, ?)

顺便说一句,即使您的 table 只有三个,无柱插入也会产生错误的结果:您正在设置订单名称,phone,url,而您的 table 定义有订单名称,url,phone。