2014-07-14 64 views
2

我下表有Postgre:如何在更新期間將null設置爲QueryDSL時間戳列?

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數據JDBC擴展更新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的設置方法不能接受null,因爲它會匹配多個功能簽名。

回答

5

在此基礎上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() 
); 
2

您可能需要將null轉換爲lastmodified的類型。例如: -

.set(userAttempts.lastmodified, (Timestamp) null) 

這樣做的原因是,null文字有歧義時,調用重載泛型方法。