2016-07-27 43 views
1

可以說我有一個MySQL表工件如下:如何在querydsl中使用mysql now()函數?

artifact_id VARCHAR(50)
locked_status炭(1)
valid_till日期時間

Select artifact_id from artifact where locked_status='Y' 

對於上述查詢,我有querydsl表示爲:

SQLTemplates templates = new MySQLTemplates(); 
Configuration configuration = new Configuration(templates); 
QArtifact artifact = new QArtifact("a"); 
SQLQuery<?> query = new SQLQuery<Void>(con, templates); 
List<String> artifactIds = query.select(artifact.artifact_id) 
      .from(artifact) 
      .where(artifact.locked_status.eq("Y")) 
      .fetch(); 

如何在querydsl中表示以下查詢?

Select artifact_id from artifact where locked_status='Y' and valid_till > now() 

回答

0

最簡單的方法是添加

.and(artifact.valid_till.after(new Date())) 

但是,如果你是挑剔NOW函數的調用服務器上你可能會去這一點:

.and(artifact.valid_till.after(Expressions.currentTimestamp())) 

可以瀏覽代碼以查看該幫助程序返回的DateTimeExpression是如何生成的。

+0

獲取此錯誤 - 使用Expressions.currentTimestamp()選項時,類型TemporalExpression 中的(Timestamp)之後的方法不適用於參數(DateTimeExpression )。 – Vedha

+0

好吧,然後試試這個:'DateTimeExpression.currentTimestamp(Timestamp.class)'。它實際上和上面的表達式一樣,用另一個Class作爲參數。 – Simon

+0

謝謝,按預期工作 – Vedha