1

在运行以下代码段时:

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

在查询bookIDand regIDare 类型Long和发出的是一个包含bookIDand的类regID

为什么我会收到此异常?

4

4 回答 4

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);
}
于 2013-06-29T22:00:14.967 回答
0

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

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

并且查询它将返回可以转换为已发布的对象列表。

于 2013-06-29T17:31:40.443 回答
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();
}
于 2013-06-29T10:27:02.310 回答
0

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

这个查询看起来像一个普通的本机查询。它将给出 Object[] 列表。

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

如果您使用 JPA 查询,您可以获得已发布的对象(如果您有已发布的 POJO 对象)

于 2013-06-29T09:11:50.667 回答