Ton*_*ony 22 java collections hibernate biginteger long-integer
我有List<Long> dynamics
.我希望得到最大的结果Collections
.这是我的代码:
List<Long> dynamics=spyPathService.getDynamics();
Long max=((Long)Collections.max(dynamics)).longValue();
Run Code Online (Sandbox Code Playgroud)
这是我的getDynamics
:
public List<Long> getDynamics() {
Session session = null;
session = this.sessionFactory.getCurrentSession();
Query query = session
.createSQLQuery("SELECT COUNT(*) FROM SpyPath WHERE DATE(time)>=DATE_SUB(CURDATE(),INTERVAL 6 DAY) GROUP BY DATE(time) ORDER BY time;");
List<Long> result = query.list();
return result;
}
Run Code Online (Sandbox Code Playgroud)
现在我来了java.math.BigInteger cannot be cast to java.lang.Long
.怎么了?
Ani*_*rni 30
更好的选择是使用SQLQuery#addScalar而不是强制转换为Long
或BigDecimal
.
这是修改后的查询,将count
列返回为Long
Query query = session
.createSQLQuery("SELECT COUNT(*) as count
FROM SpyPath
WHERE DATE(time)>=DATE_SUB(CURDATE(),INTERVAL 6 DAY)
GROUP BY DATE(time)
ORDER BY time;")
.addScalar("count", LongType.INSTANCE);
Run Code Online (Sandbox Code Playgroud)
然后
List<Long> result = query.list(); //No ClassCastException here
Run Code Online (Sandbox Code Playgroud)
相关链接
Hibernate.LONG
,记住它已被弃用,因为Hibernate版本3.6.X LongType.INSTANCE
Ami*_*leb 21
您的错误可能在此行中:
List<Long> result = query.list();
Run Code Online (Sandbox Code Playgroud)
其中query.list()返回BigInteger列表而不是Long列表.尝试将其更改为.
List<BigInteger> result = query.list();
Run Code Online (Sandbox Code Playgroud)
尝试像这样将BigInteger转换为long
Long longNumber= bigIntegerNumber.longValue();
Run Code Online (Sandbox Code Playgroud)