我在我的项目中使用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)
谢谢: