例如,我有一个表格学生它包含 id ,名称,年龄>等列STRONG> 我正在使用 NativeQuery 恢复特定列值,如下所示。
Query query = entityManager.createNativeQuery("SELECT age FROM Student");
List list=query.getResultList();
使用上述查询我们将在学生表中获取年龄列表 现在我希望从表中获得年龄和名称。
Query query = entityManager.createNativeQuery("SELECT age,name FROM Student");
List list=query.getResultList();
如果我这样做,我的代码执行得很好,但是如何在一个列表中获取名称并在另一个列表中使用年龄。那么我该怎么做呢。非常感谢你
注意 我的项目中没有任何Entity类或POJO类我使用Native Query从数据库获取表。
答案 0 :(得分:6)
你可以通过两种方式接近它。
将结果集中的值解析为单独的列表。由于您没有为其定义实体,查询将返回
List<Object[]> list = query.getResultList();
对于返回的每一行,您可以按其出现的索引访问年龄和名称。即在上面的示例中首先选择年龄,因此您将是索引0而名称是索引1.
for (Object[] obj : list) {
age = obj[0];
name = obj[1];
// ..put them into whatever collection you desire
}
使用两个查询。一个选择AGE,另一个选择NAME。每个人都会将相应的值返回给它自己的列表。
Query query = entityManager.createNativeQuery("SELECT age FROM Student");
List ages=query.getResultList();
query = entityManager.createNativeQuery("SELECT name FROM Student");
List names=query.getResultList();
这种方法的唯一警告是两个列表之间没有真正的关系。换句话说,年龄[3]可能在逻辑上不匹配名称[3]。但是......实际上,原始问题没有关于如何创建两个列表的任何定义。
答案 1 :(得分:1)
我相信这个问题已得到解答here。
但是我强烈建议使用列名和年龄创建名为Student的标准实体。这种方法将更容易实现并在将来维护它。
答案 2 :(得分:1)
我根据@dispake的答案,他提出了两种解决此问题的方法,但他忘了把方法放在第一种方法上。我认为这是一种优化的方法(您只需要执行一个查询而不是两个查询)就可以做到这一点:
List<Object[]> list = query.getResultList();
for (Object[] obj : list) {
int age = (int) obj[0];
String name = (String) obj[1];
}
希望这对您有帮助