循环使用Hibernate查询填充的列表时出现ClassCastException

时间:2017-11-27 12:15:22

标签: java hibernate biginteger classcastexception

我有一个由数据库查询(Hibernate)填充的List ids。数据库 是PSQL。 ids列是bigint类型。 现在填充了ids列表,没有像这样的任何异常

List<Long> ids = getIds();//getIds returns List<Long>

但是当我尝试通过

遍历id列表中的项目时
 for (Long id : ids)

我得到了例外

java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long

值为206131954.我不知道为什么它可以将值添加到列表中,但稍后在尝试浏览列表时出现错误。

public List<Long> getIds() {
    List<Long> externalIds = new ArrayList<Long>();
    List<Person> persons = repository.getPeople();
    for (Person person : persons) {
        List<Long> ids = repository.getIdentifications(person);
        if (ids.size() > 0) {
            externalIds.addAll(ids);
        }
    }
    return externalIds;
}

public List<Long> getIdentifications() {
    String q = "select person_id from relevantpeople";
    Query query = entityManager.createNativeQuery(q);
    return (List<Long>) query.getResultList();
}

1 个答案:

答案 0 :(得分:0)

使用List<BigInteger>代替List<Long>

BigInteger能够保存比Long更大的整数。

  

BigInteger持有(2 ^ 32)^ Integer.MAX_VALUE;

     

长期持有(2 ^ 63)-1;