我使用此本机查询来获取数据。 library(dplyr)
DF %>%
group_by(ID) %>%
mutate(PREV_CASH = lag(cumsum(CASH)), PREV_CASH = replace(PREV_CASH, PREV_CASH==0, NA))
# ID YEAR CASH PREV_CASH
# <fctr> <dbl> <dbl> <dbl>
#1 A 1900 1 NA
#2 A 1901 2 1
#3 A 1902 3 3
#4 A 1903 1 6
#5 B 1900 0 NA
#6 B 1901 1 NA
#7 B 1902 0 1
我使用下面的代码将对象列表转换为整数列表
select c.id,c.name from customer c,information i where i.status=1 and c.id=i.customerId
查询检索一个带有id和name的列表。上面的代码给出了输出,无异常。但我要求List只有id。当我从查询中删除c.name时,如下public List<Integer> getAllIdsByGroupId(Integer groupId) throws Exception {
List<Object[]> list = repository.getAllIdsByGroupId(groupId);
List<Integer> ids = repository.mapIds(list);
return ids;
}
public List<Object[]> getAllIdsByGroupId(Integer groupId) {
Query query = entityManager.createNativeQuery("select c.id,c.name from customer c,information i where i.status=1 and c.id=i.customerId and c.groupId=:groupId");
query.setParameter("groupId", groupId);
List<Object[]> list = query.getResultList();
if (list == null || list.isEmpty()) {
return null;
}
return list;
}
public List<Integer> mapIds(List<Object[]> list) {
List<Integer> ids = new ArrayList<Integer>();
if (list != null && !list.isEmpty()) {
Integer id;
for (Object[] object : list) {
id = (object[0] != null ? (Integer) object[0] : null);
ids.add(id);
}
}
return ids;
}
,上述代码失败并产生异常
select c.id from customer c,information i where i.status=1 and c.id=i.customerId
有什么帮助吗?提前谢谢。
答案 0 :(得分:2)
如果您正在使用JPA / Hibernate获取单列数据,则它会隐式返回List<Integer>
(基于该列的类型),因此无需将其转换为整数列表。
一般规则:
答案 1 :(得分:2)
问题在于类型转换
更改
List<Object[]> list = query.getResultList();
要
的 List<Object> list = query.getResultList()
强>
它是您的代码尝试转换的对象列表,并将整数转换为数组列表。
如果您只是想获取ID, List<Integer> list = query.getResultList()
也就足够了
答案 2 :(得分:0)
试试这个可能不会在我的编辑器中尝试但是我可以帮助你解决这个问题。
public List<Integer> mapIds(List<Object[]> list) {
List<Integer> ids = new ArrayList<Integer>();
if(list != null && !list.isEmpty()) {
int id;
for(Object[] object : list) {
id = (int) (object[0] != null ? object[0] : null);
ids.add(id);
}
}
return ids;
}
答案 3 :(得分:0)
虽然问题是缺少大量信息,但ClassCastException
的最可能原因是您尝试将非Integer
类型的对象投射到Integer
类型。我不确定你传递给方法的列表中有什么,但如果列表确实包含一些Integer
类型的对象,那么你可以尝试在转换元素{{{}}之前检查它。 1}}进入object[0]
,
Integer
但是,如果public List<Integer> mapIds(List<Object[]> list) {
List<Integer> ids = new ArrayList<Integer>();
if (list != null && !list.isEmpty()) {
Integer id;
for (Object[] object : list) {
id = ((object[0] != null && object[0] instanceof Integer) ? (Integer) object[0] : null);
ids.add(id);
}
}
}
return ids;
}
中的对象不包含任何list
个对象,那么实现您正在做的事情的唯一方法是为每个{初始化Integer
个对象{1}}以某种方式检索每个中的Integer
值。只有你知道如何做到这一点。