私が持っている List<Long> dynamics
。そして、Collections
を使用して最大の結果を取得します。これは私のコードです:
List<Long> dynamics=spyPathService.getDynamics();
Long max=((Long)Collections.max(dynamics)).longValue();
これは私の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;
}
今、私はJava.math.BigInteger cannot be cast to Java.lang.Long
。どうしましたか?
エラーは次の行にある可能性があります。
List<Long> result = query.list();
query.list()は、長いリストではなくBigIntegerリストを返します。に変更してみてください。
List<BigInteger> result = query.list();
より良いオプションは、Long
またはBigDecimal
にキャストするよりも SQLQuery#addScalar を使用することです。
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);
それから
List<Long> result = query.list(); //No ClassCastException here
関連リンク
Hibernate.LONG
、覚えておいてくださいHibernateバージョン3.6.Xから非推奨になりましたLongType.INSTANCE
BigIntegerをこのようなlongに変換してみてください
Long longNumber= bigIntegerNumber.longValue();
私は文脈に欠けていますが、これはうまく機能しています:
List<BigInteger> nums = new ArrayList<BigInteger>();
Long max = Collections.max(nums).longValue(); // from BigInteger to Long...
カウントのエイリアスをクエリに追加し、Hibernateの縫い目のaddScalar()
メソッドのデフォルトとしてlist()
メソッドを使用して、数値SQLのBigInteger
にする必要があります。タイプ。以下に例を示します。
List<Long> sqlResult = session.createSQLQuery("SELECT column AS num FROM table")
.addScalar("num", StandardBasicTypes.LONG).list();
ダイナミクスはList<Long>
ではなくList<BigInteger>
ですか?
ダイナミクスがList<Long>
である場合、(Long)へのキャストを行う必要はありません
D.getIdがLongであると想像してから、次のようにラップします。
BigInteger l = BigInteger.valueOf(d.getId());