运行以下代码段:
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
的类。
为什么我会收到此异常?
答案 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的对象列表。