2014-03-26 25 views
1

比如我有一个表作为学生它包含类似ID年龄列 我用NativeQuery像下面回复特定的列值。如何使用JPA从表中获取多列?

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(); 

如果我做这样我的代码执行良好,但在另一个list.So在一个列表和年龄如何,我得到的名字,我怎么能做到这一点。非常感谢您

注意 我没有在我的项目从数据库使用原生查询任何实体类或POJO类我收到表。

+0

它引发了什么异常。它应该工作并返回一个对象列表[] – andy

+0

@andy我很抱歉它正在执行,但我怎么能在另一个列表中获得另一个列表和名称的年龄。谢谢 – Prabha

+2

使用强制转换,类似于(Ojbect o:list){Object [] values =(Object [])o; int age =(int)values [0]; String name =(String)values [1];} – andy

回答

1

我相信这个问题已经回答了here

但是,我强烈建议创建标准实体,称为学生列名称和年龄。这种方法将更容易实施并在将来进行维护。

+0

谢谢,在这里我没有POJO类 – Prabha

+0

我想最简单的方法就是创建它们。但是,如果你不想这样做 - 你可能会考虑使用标准的java.sql.Connection实例吗?这样你就可以自己管理查询和结果。 100%控制。 – altanis

2

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

  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(); 
    

    只有告诫这种方法是两个列表之间没有真正的关系。换句话说,年龄[3]在逻辑上可能不符合名字[3]。但是......事实上,原来的问题没有定义如何创建两个列表。

+0

我以第二种方式完成。我不知道第一种方式,现在很好,谢谢 – Prabha