【发布时间】:2012-10-03 07:01:35
【问题描述】:
我必须将可滚动结果引用转换为列表引用。可能吗?
当我尝试转换时,我得到了java.lang.ClassCastException: org.hibernate.impl.ScrollableResultsImpl cannot be cast to java.util.List. 的异常
请提供此问题的解决方案....
【问题讨论】:
标签: java hibernate collections
我必须将可滚动结果引用转换为列表引用。可能吗?
当我尝试转换时,我得到了java.lang.ClassCastException: org.hibernate.impl.ScrollableResultsImpl cannot be cast to java.util.List. 的异常
请提供此问题的解决方案....
【问题讨论】:
标签: java hibernate collections
您不能将ScrollableResults 对象转换为List。投射不会自动为您转换对象。您需要自己创建一个新的List,然后遍历ScrollableResults 并将每一行添加到List 自己:
ScrollableResults result = ...;
List<...> list = new ArrayList<>();
while (result.next()) {
list.add(result.get());
}
【讨论】:
Object[] 转换为OrderDTO。对象数组根本不是OrderDTO,所以你不能那样转换它。你需要自己编写代码来转换它。
ScrollableResults 中的每一行都由一组对象组成(行中的每一列都有一个对象)。您需要自己将这些列转换为 OrderDTO 对象。
org.hibernate.impl.ScrollableResultsImpl 没有实现java.util.List 接口。所以你不能把它投射到列表中。
您应该通过调用 next 方法滚动对象并通过ScrollableResultsImpl#getCurrentRow() 获取行值,然后插入到您的列表中。
ScrollableResults sResult = ...;
List<Object[]> list = any list implementation; like ArrayList/LinkedList...
while (sResult.next()) {
list.add(result.getCurrentRow());
}
【讨论】:
ScrollableResults 中没有 getCurrentRow() 方法。不过有一个get() 方法。
AbstractScrollableResults 并在ScrollableResultsImpl link 中实现