如何在更新期间将null设置为QueryDSL时间戳列?

时间:2014-07-14 00:47:15

标签: java spring-data querydsl

我在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,因为它将匹配多个函数签名。

2 个答案:

答案 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文字是不明确的。