[英]Pass null primary key with jOOQ to have it set by the database
对于REST服务,我收到一个要保留在数据库中的对象。 我想防止用户设置ID。 相反,数据库应该从序列中自动分配值,例如Postgresql的SERIAL。
如果我尝试使jOOQ生成的记录中的ID无效,那么当我尝试存储它时数据库将出错。
这是相关的DDL。
CREATE TABLE todo (
id SERIAL PRIMARY KEY,
title TEXT,
url TEXT
);
这是相关的代码。 完整代码位于todo-backend 。
@POST
public Todo addTodo(Todo todo, @Context DSLContext db) {
final TodoRecord todoRecord = db.newRecord(TODO, todo);
// This errors out, violates not-null constraint on DB
todoRecord.setId(null);
todoRecord.store();
todoRecord.setUrl("http://localhost:8080/" + todoRecord.getId());
todoRecord.store();
return db.selectFrom(TODO)
.where(TODO.ID.eq(todoRecord.getId()))
.fetchOneInto(Todo.class);
}
一些数据库在键中允许使用NULL
值。 或者,也许您有一个触发器,可以监听在主键上设置的NULL
值。
这就是为什么jOOQ不能想当然地认为你的意图,此调用是设置ID
到DEFAULT
。 jOOQ将假定您确实希望在INSERT
或UPDATE
语句中设置NULL
:
todoRecord.setId(null);
相反,写
todoRecord.changed(TODO.ID, false);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.