如何使用JPA从表中获取多个列?

Pra*_*bha 5 java hibernate jpa eclipselink nativequery

例如,我有一个表作为学生它包含像id,name,age这样的列 我通过使用NativeQuery来恢复特定的列值,如下所示.

Query query = entityManager.createNativeQuery("SELECT age FROM Student");
List list=query.getResultList(); 
Run Code Online (Sandbox Code Playgroud)

通过使用上面的查询我们将获得学生表中的年龄列表现在我想从表中获取年龄名称.

Query query = entityManager.createNativeQuery("SELECT age,name FROM Student");
List list=query.getResultList();
Run Code Online (Sandbox Code Playgroud)

如果我喜欢这样,我的代码执行得很好,但是如何在一个列表中获取名称并在另一个列表中显示年龄.那么我该怎么做呢.非常感谢你

注意 我的项目中没有任何Entity类或POJO类我使用Native Query从数据库获取表.

dis*_*ake 9

你可以用两种方式来接近它.

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

    List<Object[]> list = query.getResultList();
    
    Run Code Online (Sandbox Code Playgroud)

    对于返回的每一行,您可以按其出现的索引访问年龄和名称.即在上面的示例中首先选择Age,因此您将是索引0而Name是索引1.

    for (Object[] obj : list) {
         age = obj[0];
         name = obj[1];
         // ..put them into whatever collection you desire
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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();
    
    Run Code Online (Sandbox Code Playgroud)

    只有这个方法的警告是两个列表之间没有真正的关系.换句话说,年龄[3]可能在逻辑上不匹配名称[3].但是......实际上,原始问题没有关于如何创建两个列表的任何定义.


Seb*_*iec 2

我相信这个问题在这里已经有了答案。

不过,我强烈建议创建名为 Student 的标准实体,其中包含列名称和年龄。这种方法将来会更容易实施和维护。