我有两个sql查询,它返回列表。我的代码:
List<String> list = em.createNativeQuery(query1).getResultList();
list.addAll(em.createNativeQuery(query2).getResultList());
我拥有:列出两个子列表 - 来自query1的子列表和来自query2的子列表。
我需要的:一个包含来自query1和query2的所有元素的列表。
有什么想法吗?
问题出现在第一次sql查询中。结果是在对象数组中添加,因此addAll方法无法解决我的问题。
答案 0 :(得分:8)
addAll()将起作用。从查询
获取数据的代码是正确的答案 1 :(得分:2)
我创建了一个类似的情况来测试你在说什么。显然我无法访问您的特定数据库进行查询,因此我只关注您的问题; List
组合。
List<String> foods = new ArrayList<String>(); //this is analogous with the list returned from your first query
foods.add("Beef");
foods.add("Chicken");
System.out.println("foods(query1): "+foods);
List<String> fruits = new ArrayList<String>(); //this is analogous with the list returned from your second query
fruits.add("Apple");
fruits.add("Peach");
fruits.add("Pear");
System.out.println("fruits(query2): "+fruits);
foods.addAll(fruits); //this combines the two lists (your two queries)
System.out.println("foods(after combination of queries): "+foods);
输出结果为:
foods(query1): [Beef, Chicken]
fruits(query2): [Apple, Peach, Pear]
foods(after combination of queries): [Beef, Chicken, Apple, Peach, Pear]
我唯一的想法是,为什么你没有得到那个结果将是你的一个查询没有返回任何东西......我建议尝试打印出每个列表,然后将它们添加到一起,如上所述,看看是否一个是空的。
答案 2 :(得分:0)
您实际上想要创建列表列表,即:
List<List<String>> listOfLists = ...;
您不能将字符串和字符串列表存储在以这种方式定义的同一列表中。如果你确实想要这样做,你应该只定义List<Object>
,你就可以存储任何类型的元素。但是,强烈建议不要这样做。已经在java中引入了泛型以防止在编译时使用这种用法。
那么,您可能真正想要的是创建字符串列表列表,然后执行返回字符串列表的查询并将结果添加到第一个列表中:
List<List<String>> list = new LinkedList<List<String>>();
list.addAll(em.createNativeQuery(query1).getResultList());
list.addAll(em.createNativeQuery(query1).getResultList());
BTW也不建议使用这种方法。通常,如果你想创建n> 1的n维集合,你可能应该创建另一个包含集合和其他东西的容器类,然后创建一个存储该类实例的一维集合。