11

我有两个 sql 查询,它们返回列表。我的代码:

List<String> list = em.createNativeQuery(query1).getResultList();
list.addAll(em.createNativeQuery(query2).getResultList());

我所拥有的:包含两个子列表的列表 - 来自 query1 的子列表和来自 query2 的子列表。
我需要:一个包含来自 query1 和 query2 的所有元素的列表。
任何想法?


问题出在第一个 sql 查询中。结果是添加到对象数组中,因此 addAll 方法不能解决我的问题。

4

3 回答 3

10

addAll() 将起作用。从查询中获取数据的代码是正确的

于 2013-06-12T12:51:20.530 回答
4

我创造了一个类似的情况来测试你在说什么。显然我无权访问您的特定数据库进行查询,所以我只关注您的问题;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]

关于为什么你没有得到这个结果,我唯一的想法是你的一个查询没有返回任何东西......我建议在将它们添加在一起之前尝试打印出每个列表,就像我上面所做的那样,看看一个是否为空.

于 2013-06-12T15:13:09.957 回答
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());

顺便说一句,也不推荐这种方法。通常,如果您想创建 n>1 的 n 维集合,您可能应该创建另一个包含集合和其他内容的容器类,然后创建存储此类实例的一维集合。

于 2013-06-12T12:31:09.147 回答