运行以下代码片段时:
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
在查询中,bookID
和 regID
的类型为 Long
并发出一个包含 bookID
和 regID
的类。
为什么我会收到此异常?
尝试使用以下代码。
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();
}
中选择对象不需要 select 子句(请参阅 HQL 参考(。因此,您可以只使用以下 HQL 查询:
String hqlSelect = "from Issued where regID = " + regID;
和查询它将返回可以强制转换为 Issued 的对象列表。