代码之家  ›  专栏  ›  技术社区  ›  krltos

在使用Hibernate查询填充的列表中循环时发生ClassCastException

  •  0
  • krltos  · 技术社区  · 7 年前

    我有一个由数据库查询(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。我不知道为什么它可以将值添加到列表中,但后来在尝试遍历列表时出现了错误。

    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 回复  |  直到 7 年前
        1
  •  0
  •   GuilhermeFGL    7 年前

    使用 List<BigInteger> 而不是 List<Long>

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

    BigInteger保存(2^32)^Integer。最大_值;

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