【发布时间】:2020-10-11 20:47:50
【问题描述】:
我有一个像这样生成的 H2 SQL 数据库:
CREATE TABLE IF NOT EXISTS dog
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
...
breed_id BIGINT, -- references to breed(id) (see next line
FOREIGN KEY (breed_id) REFERENCES breed(id)
);
请注意,breed_id 是可选的。
为了在这个数据库中存储数据,我使用类似的东西
@Override
public Dog save(Dog dog) {
final String sql =
"INSERT INTO " +
TABLE_NAME +
" (name, [...], breed_id)" +
"VALUES (?, [...], ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, dog.getName());
[...]
if (dog.getBreed() != null) {
stmt.setLong(5, dog.getBreed().getId());
} else {
// leave breed_id field empty
}
return stmt;
}, keyHolder);
breed.setId(((Number)keyHolder.getKeys().get("id")).longValue());
return breed;
}
我的问题是,如果dog.getBreed() 返回null,如何将breed_id 字段留空?
Java 不允许我设置 stmt.setLong(5, null);,我理解为 long 不知道 null。
但是,什么是优雅的方法呢?
【问题讨论】:
标签: java spring-boot jdbc null jdbctemplate