繁体   English   中英

无法自动获取数据库中记录的 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;
    }

}

将记录写入数据库的方法。 我只想将它发送到数据库并自动为该表中的每条记录获取一个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM