2016-06-15 2 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 Driver com.microsoft.sqlserver.jdbc.SQLServerDriver(sqljdbc4.jar)を使用しています。Hibernate + SQL Server - タイムスタンプを日付にキャストエラー

問題は、createdAt列(Date(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をキャストします。上記の同じクエリを実行するが、キーワードdatetimeを日付に変更すると、MSSQLで完全に機能します...これはHibernate MSSQL Dialectと関係があると思われます。

あなたは私を助ける考えがありますか?

ありがとうございました!この問題を有していてもよく、将来の人々のために

答えて

0

、私は以下のアプローチを使用してこの問題を解決:

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) 

ありがとうございました!