当我尝试获取Long类型的属性时,为什么会出现ClassCastException?

时间:2013-06-29 09:05:38

标签: java hibernate hql

运行以下代码段:

String hqlSelect = "select bookID from Issued where regID = " + regID;
    List list = sess.createQuery(hqlSelect).list();
    Iterator i = list.iterator();
    while(i.hasNext()) {
        Issued issued = (Issued) i.next(); // LINE : 46
        bookIdList.add(issued.getBookID());
    }

行号46会产生异常。

java.lang.ClassCastException: java.lang.Long cannot be cast to pojo.Issued

在查询bookIDregID类型Long中,发布的是包含bookIDregID的类。

为什么我会收到此异常?

4 个答案:

答案 0 :(得分:1)

尝试使用以下代码。

String hqlSelect = "select new java.lang.Long(bookID) from Issued where regID = " + regID;
List<Long> list = (List<Long>)sess.createQuery(hqlSelect).list();
Iterator<Long> i = list.iterator();
while(i.hasNext()) {
    bookIdList.add(i);
}

您也可以使用for each循环

for (Long i : list) {
bookIdList.add(i);
}

答案 1 :(得分:0)

String hqlSelect =&#34;从Issued中选择bookID,其中regID =&#34; + regID;

此查询看起来像普通的本机查询。它将给出Object [] List。

List<Object> list = sess.createNativeQuery(hqlSelect).list();

如果你正在使用JPA查询,你可以获得Issued对象(如果你有POJO Object for Issued)

答案 2 :(得分:0)

使用以下代码获取bookID

String hqlSelect = "select bookID from Issued where regID = " + regID;
    List<Object[]> list = sess.createQuery(hqlSelect).list();

for (Object[] result : list) {        
    long bookId = ((Number) result[0]).longValue();
}

答案 3 :(得分:0)

您不需要select子句来选择HQL中的对象(请参阅HQL Reference)。 所以你可以使用以下HQL查询:

String hqlSelect = "from Issued where regID = " + regID;

并且查询它将返回一个可以强制转换为Issued的对象列表。