gpt4 book ai didi

java - JdbcTemplate如何自动生成主键

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:18 24 4
gpt4 key购买 nike

我正在使用 spring,它是用于数据库连接的 JdbcTemplate,我正在尝试为我的主键列自动生成一个键。我也在使用 HSQLDB。该表如下所示:

CREATE TABLE IF NOT EXISTS Customers (
cid BIGINT GENERATED BY DEFAULT AS PRIMARY KEY,
name VARCHAR(255) NOT NULL,
...
);

我的 Dao 对象中的代码如下所示:

Map<String, Object> values = new HashMap<String, Object>();
values.put("name", customer.getName());
// NOT putting the cid
...
SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbc).withTableName(
"CUSTOMERS").usingGeneratedKeyColumns("CID");
Long key = (Long) insert.executeAndReturnKey(values);

如您所见,我没有手动输入 key ,我希望 usingGeneeratedKeyColumns 方法会自动为我生成它。无论如何,我在执行 executeAndReturnKey 后收到此错误:

org.springframework.dao.DataIntegrityViolationException:PreparedStatementCallback; SQL[];完整性约束违规:NOT NULL 检查约束; SYS_PK_10094 表:CUSTOMERS 列:CID;嵌套异常是 java.sql.SQLIntegrityConstraintViolationException:完整性约束违规:NOT NULL 检查约束; SYS_PK_10094 表:CUSTOMERS 列:CID

最佳答案

问题是从 HSQLDB 自动生成键的语法略有不同。您需要将其定义为 IDENTITY,然后定义为 PRIMARY KEY:

CREATE TABLE IF NOT EXISTS Customers (
cid BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
...
);

关于java - JdbcTemplate如何自动生成主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com