Java JPA query.getResultList()?

Java JPA query.getResultList()?,java,jakarta-ee,jpa,persistence,Java,Jakarta Ee,Jpa,Persistence,我使用JPA1.0: Query query; query = em.createNamedQuery("getThresholdParameters"); query.setParameter(1, Integer.parseInt(circleId)); List<Object[]> resultList = new ArrayList(); resultList = query.

我使用JPA1.0:

Query query;
            query = em.createNamedQuery("getThresholdParameters");
            query.setParameter(1, Integer.parseInt(circleId));

            List<Object[]> resultList = new ArrayList();
            resultList  = query.getResultList();

您的查询选择了许多字段。这样的查询总是返回对象数组的列表。如果您想要一个包含GmaThresholdParameter实体实例的列表,那么查询应该是

select gmaTh from GmaThresholdParameter gmaTh 
where gmaTh.id.circleId=?1 AND gmaTh.id.tspId=?2 AND gmaTh.id.flag=?3
获取实体列表的代码将是

List<GmaThresholdParameter> resultList = query.getResultList();
List resultList=query.getResultList();

您将从编译器中得到一个类型安全警告,您可以忽略它。

我不能以注释的形式对此作出响应,所以我将继续回答

List<Object[]> resultList = new ArrayList(); // CREATE an empty ArrayList object
resultList  = query.getResultList(); // getResultList ALSO returns its own ArrayList object
List resultList=new ArrayList();//创建一个空的ArrayList对象
resultList=query.getResultList();//getResultList还返回它自己的ArrayList对象
而且,由于您将getResultList()返回的列表分配给用于自己的空ArrayList的同一变量,因此应用程序会丢失与自己的空ArrayList的任何连接,Java会将其作为垃圾收集。基本上,你创造它是毫无目的的

没有贴的就够了

List<GmaThresholdParameter> resultList = query.getResultList();
List resultList=query.getResultList();

自从我当时使用JPA 1以来,我做了类似的事情:

    final Collection<YourType> typedResult = new ArrayList<YourType> 
    for(final Object result : query.getResultList()) 
    { 
         typedResult.add((YourType) result); 
    }  
    return typedResult; 
final Collection typedResult=new ArrayList
for(最终对象结果:query.getResultList())
{ 
typedResult.add((YourType)结果);
}  
返回类型结果;
列表结果=query.getResultList();
用于(GMAThresholdParameterRes:result)
{
System.out.println(“+res.getMinNumberOc());
System.out.println(“+res.getMinDurationOc());
}

通过定义正确的JPQL。发布代码引用的命名查询。PS:您正在手动创建的ArrayList实例会立即被查询返回的列表覆盖。@Gimby:已经发布了以前询问过的这样的QueryLook。如果是我,我会考虑升级到JPA2,这可能是一个完美的借口。如果只想覆盖resultList,也不要浪费时间实例化它。@Benthrley:我没有得到覆盖的东西?我还应该在哪里捕获结果列表?(我发布了一个答案,试图向您展示我们的意思):这还将返回实体中所有其他成员的id,我不想在您必须处理
列表时返回id。请注意,从表中选择行时排除某些列通常不会对性能产生任何可测量的影响。您可能过早地以错误的方式进行了优化。
    final Collection<YourType> typedResult = new ArrayList<YourType> 
    for(final Object result : query.getResultList()) 
    { 
         typedResult.add((YourType) result); 
    }  
    return typedResult; 
 List<GmaThresholdParamerter> result= query.getResultList();
   for( GmaThresholdParamerter res : result)
   {
     System.out.println("" +res.getMinNumberOc());
     System.out.println("" +res.getMinDurationOc());
  }