7

例如,我有一个作为Student的表,它包含像idnameage这样的列, 我正在使用NativeQuery来恢复特定的列值,如下所示。

Query query = entityManager.createNativeQuery("SELECT age FROM Student");
List list=query.getResultList(); 

通过使用上面的查询,我们将在Student表中获取年龄列表现在我想从表中获取年龄姓名

Query query = entityManager.createNativeQuery("SELECT age,name FROM Student");
List list=query.getResultList();

如果我确实喜欢这个我的代码执行得很好,但是我怎样才能在一个列表中获取名称并在另一个列表中获取年龄。那么我该怎么做。非常感谢

注意 我的项目中没有任何实体类或 POJO 类我使用本机查询从数据库中获取表。

4

3 回答 3

11

你可以通过两种方式来处理它。

  1. 将结果集中的值解析为单独的列表。由于您没有为其定义实体,因此查询将返回一个

    List<Object[]> list = query.getResultList();
    

    对于返回的每一行,您可以通过它们出现的索引来访问年龄和姓名。即在上面的示例中首先选择了年龄,因此您将它是索引 0,而名称是索引 1。

    for (Object[] obj : list) {
         age = obj[0];
         name = obj[1];
         // ..put them into whatever collection you desire
    }
    
  2. 使用两个查询。一个选择 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();
    

    唯一需要注意的是,这两个列表之间没有真正的关系。换句话说,ages[3] 可能在逻辑上不匹配名称[3]。但是......事实上,原始问题没有关于如何创建这两个列表的任何定义。

于 2014-03-26T08:26:37.373 回答
3

我根据@dispake 的回答,他提出了两种解决此问题的方法,但他忘记了您将铸造用于第一种方法。在我看来,它是优化的(你只需要做一个查询而不是两个)这样做:

List<Object[]> list = query.getResultList();

for (Object[] obj : list) {
     int age = (int) obj[0];
     String name = (String) obj[1];
}

我希望这能帮到您

于 2018-11-23T15:58:31.560 回答
2

我相信这个问题已经在这里得到了回答。

但是,我强烈建议使用列名和年龄创建名为 Student 的标准实体。这种方法在未来将更容易实施和维护。

于 2014-03-26T07:43:06.190 回答