2016-06-15 110 views
0

我在我的項目中使用Springboot 1.3.5.RELEASE,SpringDataJpa 1.9.4.RELEASE,Hibernate 4.3.11.FINAL訪問MSSQL Server 2014.在我的application.properties我設置了最近的方言,它是org.hibernate.dialect.SQLServer2012Dialect,我使用手動導入的Microsoft JDBC驅動程序com.microsoft.sqlserver.jdbc.SQLServerDriver(sqljdbc4.jar)。Hibernate + SQL Server - Cast Timestamp日期錯誤

問題是,我想檢索一個簡單的查詢,使用我的createdAt列,這是一個時間戳,可以轉換爲日期(YYYY-MM-DD)。所以,我有下面的命名查詢我的交易實體:

SELECT new myproject.wrapper.TrendingChartData(cast(createdAt as date), 
     liveVerifyCode, count(*)) 
    FROM Transaction t 
    WHERE t.bucket.id = :bucketId 
GROUP BY cast(createdAt as date), liveVerifyCode 

不過我檢索日期是這樣的:

DATE  | Code | Count 
2016-06-10| 2 | 1 
2016-06-10| 1 | 1 
2016-06-10| 2 | 1 
2016-06-10| 1 | 1 
2016-06-10| 2 | 1 
2016-06-10| 2 | 1 
2016-06-10| 1 | 1 
2016-06-10| 1 | 1 
2016-06-10| 1 | 1 

這樣看來,它鑄造的結果,但它的鑄造分組。我產生了一些我的SQL,我有:

select cast(transactio0_.createdAt as datetime) as col_0_0_, 
     transactio0_.liveVerifyCode as col_1_0_, 
     count(*) as col_2_0_ 
    from TransactionData transactio0_ 
    where transactio0_.bucket_id=? 
group by cast(transactio0_.createdAt as datetime), transactio0_.liveVerifyCode 

因此,由於某些原因,鑄造日期時間而不是日期。如果運行相同的上面的查詢,但將關鍵字datetime更改爲日期,則它在MSSQL中完美工作......看起來這與Hibernate MSSQL Dialect有關。

你們有什麼想法來幫助我嗎?

非常感謝!

SELECT new myproject.wrapper.TrendingChartData(
     year(t.createdAt), month(t.createdAt), day(t.createdAt), 
     liveVerifyCode, count(*)) 
    FROM Transaction t 
WHERE t.bucket.id = :bucketId 
GROUP BY year(t.createdAt), month(t.createdAt), day(t.createdAt), t.liveVerifyCode 
ORDER BY year(t.createdAt), month(t.createdAt), day(t.createdAt) 

謝謝:

回答

0

對於可能有這個問題今後的鄉親,我使用下面的方法解決了這個問題!