我在Postgre中有以下表格:
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 )
);
我想通过QueryDSL和Spring Data JDBC Extension更新lastmodified
字段,如下所示:
template.update(userAttempts, update -> update
.set(userAttempts.attempts, (short) 0)
.set(userAttempts.lastmodified, null) // compilation error here
.where(userAttempts.username.eq(username))
.execute();
但是,似乎QueryDSL的set方法无法接受null
,因为它将匹配多个函数签名。
答案 0 :(得分:6)
基于此QueryDSL问题:https://github.com/querydsl/querydsl/issues/846
我应该使用setNull
方法:
template.update(userAttempts, update -> update
.set(userAttempts.attempts, (short) 0)
.setNull(userAttempts.lastmodified)
.where(userAttempts.username.eq(username))
.execute()
);
答案 1 :(得分:2)
您可能需要将null
投射到lastmodified
的类型。 E.g:
.set(userAttempts.lastmodified, (Timestamp) null)
原因是调用重载泛型方法时null
文字是不明确的。