为什么我在尝试获取 Long 类型的属性时会得到 ClassCastException



运行以下代码片段时:

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 的类。

为什么我会收到此异常?

尝试使用以下代码。

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

字符串 hqlSelect = "从已发行中选择 bookID,其中 regID = " + regID;

此查询似乎是普通的本机查询。它将给出 Object[] 列表。

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

如果您使用的是 JPA 查询,则可以获取已颁发的对象(如果您有已发布的 POJO 对象(

使用以下代码获取 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();
}
在 HQL

中选择对象不需要 select 子句(请参阅 HQL 参考(。因此,您可以只使用以下 HQL 查询:

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

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

最新更新