遍历使用 Hibernate 查询填充的列表时出现 ClassCastException

ClassCastException when looping through the list populated using Hibernate query

我有一个由数据库查询 (Hibernate) 填充的列表 ID。数据库 是 PSQL。 ids 列是 bigint 类型。 现在 ids 列表被填充,没有任何例外,就像这样

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

但是当我尝试通过

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

我得到异常

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

这个值是206131954,不知道为什么能把这个值加到list里,后来遍历list的时候就报错了。

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();
}

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

BigInteger 能够容纳比 Long 更大的整数。

BigInteger holds (2^32)^Integer.MAX_VALUE;

Long holds (2^63)-1;