QueryDSL更新时,设置字段值为NULL
表结构:
CREATE TABLE user_attempts
(
id INT PRIMARY KEY NOT NULL,
username VARCHAR(50) NOT NULL,
attempts SMALLINT NOT NULL,
lastmodified TIMESTAMP,
FOREIGN KEY (username) REFERENCES users (username)
);
错误代码:
template.update(userAttempts, update -> update
.set(userAttempts.attempts, (short) 0)
.set(userAttempts.lastmodified, null) // compilation error here
.where(userAttempts.username.eq(username))
.execute();
然而,似乎QueryDSL的设置方法不能接受null
,因为它会匹配多个功能签名。
正确代码:
我应该使用setNull
方法来代替:
template.update(userAttempts, update -> update
.set(userAttempts.attempts, (short) 0)
.setNull(userAttempts.lastmodified)
.where(userAttempts.username.eq(username))
.execute()
);