我想从我的数据库中检索(使用JPA),为给定的项目列表命名他们的id, 我的函数由我的addFunction调用,只返回最后一项的id而忽略其余项!
public ArrayList<Integer> getListidItemByItemName()
{
try{
EntityTransaction entityTrans=emm.getTransaction();
entityTrans.begin();
for (String val : listItem)
{
System.out.println("my values"+val);
javax.persistence.Query multipleSelect= em.createQuery("SELECT i.ItemId FROM Item i WHERE i.ItemName IN (:w)" );
multipleSelect.setParameter("w", val);
List ItemId = new LinkedList();
ItemId= multipleSelect.getResultList();
listIdItem = new ArrayList(ItemId);
}
entityTrans.commit();
System.out.println("Id for given item name"+listIdItem);
return listIdItem;
}
catch(Exception e)
{
e.printStackTrace();
}
结果:
INFO: my valuesResponse Time
INFO: my valuesAssigned Group Response Time
INFO: Id for given item name[7] //the id of the last item in the list
return listIdItem;
}
问题出在哪里?
更新: 我使用垫的解决方案,它工作正常
谢谢
答案 0 :(得分:1)
listIdItem = new ArrayList(ItemId);
此行用新列表替换listIdItem
中的所有内容。如果要添加到listIdItem
列表,请执行以下操作:
listIdItem.addAll(ItemId);
答案 1 :(得分:0)
您在循环的每次迭代中使用新的listIdItem
覆盖变量ArrayList
。所以最后listIdItem
只包含最后一次迭代的值。