Hibernate JPA本机查询结果集

Hibernate JPA本机查询结果集,hibernate,jpa,Hibernate,Jpa,我需要通过在Hibernate中执行本机查询来获取结果集。虽然我使用的是EntityManager,但查询和结果集可能不是实体 需要获取列表中的结果集。由于select输出可能会变化(读取动态),因此我无法使用SqlResultSetMapping 当我尝试下面的代码时,我得到了一个结果。因为我要求的是一个单值结果。(Hibernate JPA) Query Query=manager.createNativeQuery(“从Fresh_测试中选择名称,其中id=1”); 列表金额=query.

我需要通过在Hibernate中执行本机查询来获取结果集。虽然我使用的是EntityManager,但查询和结果集可能不是实体

需要获取列表中的结果集。由于select输出可能会变化(读取动态),因此我无法使用SqlResultSetMapping

当我尝试下面的代码时,我得到了一个结果。因为我要求的是一个单值结果。(Hibernate JPA)

Query Query=manager.createNativeQuery(“从Fresh_测试中选择名称,其中id=1”);
列表金额=query.getResultList();
如果(金额==null)
{
System.out.println(“嘿,它是空的”);
返回;
}
用于(对象e:arr)
{
System.out.println(例如toString());
}
输出为:Alice

当我试图用Query asselect name从同一代码中提取多个select时,从fresher_测试中指定id=1

输出为:[Ljava.lang.Object;@8b1a4f

一个对象。如何从该对象获取字段?。我试图将对象e(List l=(List)e;)类型转换为列表,但我抛出了java.lang.ClassCastException:java.lang.String无法转换为java.util.List

这有一种方法可以得到列表或数组中的值吗


注意:我不能使用结果类/实体,因为结果可能是动态的。

在获取多个列时,结果是一个
列表。
。每个
对象[]
包含一行。因此,在您的情况下,每个
对象[]
将包含两个元素,第一个是名称,第二个是名称


请注意,
getResultList()
将永远不会返回null。您不应该检查它。

JPA 2.0,如果您希望在自定义bean中获得结果:

使用特定构造函数生成bean

package my.package;
public class MyBean{
...
    public MyBean(Long id, String desc, Long id2)
然后在实体o映射中,使命名查询如下

@NamedQuery(name = "myNamedQuery", 
    query = "select new my.package.MyBean(e.idSomething, e.description, e.secondId) 
             from DBEntity e")

我也面临着同样的问题,在这里如何解决它:

List<User> records = entityManager.createNamedQuery("latestStatusByUser").getResultList();
List<User> userRecords = new ArrayList<User>();
Iterator it = records.iterator( );

while (it.hasNext( )) {
    Object[] result = (Object[])it.next(); // Iterating through array object 

    userRecords.add(new User(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7]));

    }
List records=entityManager.createNamedQuery(“latestStatusByUser”).getResultList();
List userRecords=new ArrayList();
Iterator it=records.Iterator();
while(it.hasNext()){
Object[]result=(Object[])it.next();//遍历数组对象
添加(新用户(结果[0]、结果[1]、结果[2]、结果[3]、结果[4]、结果[5]、结果[6]、结果[7]);
}

您可以使用以下命令

NativeQueryImpl nativeQuery = (NativeQueryImpl) query; 

nativeQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); 
    List<Map<String,Object>> result = nativeQuery.getResultList();
NativeQueryImpl nativeQuery=(NativeQueryImpl)查询;
nativeQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List result=nativeQuery.getResultList();
List amount=null;amount=query.getResultList();for(Object[]e:amount){System.out.println(e[0]+“”+e[1]);}
NativeQueryImpl nativeQuery = (NativeQueryImpl) query; 

nativeQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); 
    List<Map<String,Object>> result = nativeQuery.getResultList();