JPA query.getResultList()?

回眸只為那壹抹淺笑 提交于 2019-12-18 09:36:48

问题


I use JPA 1.0:

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

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

Here I get result as List<Object[]>, thus I have to type convert all the parameters of the row to their respective types which is cumbersome.

In JPA 2.0 there is TypedQuery which return an entity object of type one specifies.

But as I am using JPA 1 I can't use it.

How to get result as Entity object of type I want??

EDIT: QUERY

@Entity
@Table(name="GMA_THRESHOLD_PARAMETERS")
@NamedQuery(

        name = "getThresholdParameters",

        query = "select gmaTh.minNumberOc, gmaTh.minDurationOc, gmaTh.maxNumberIc, gmaTh.maxDurationIc, gmaTh.maxNumberCellId,"
                + "gmaTh.distinctBnumberRatio, gmaTh.minPercentDistinctBnumber from GmaThresholdParameter gmaTh " 
                + "where gmaTh.id.circleId=?1 AND gmaTh.id.tspId=?2 AND gmaTh.id.flag=?3 "
        )

回答1:


Your query selects many fields. Such a query always returns a list of Object arrays. If you want a list containing instances of your GmaThresholdParameter entity, then the query should be

select gmaTh from GmaThresholdParameter gmaTh 
where gmaTh.id.circleId=?1 AND gmaTh.id.tspId=?2 AND gmaTh.id.flag=?3

The code to get the list of entities would then be

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

You'll get a type safety warning from the compiler, that you can ignore.




回答2:


I can't respond to this as a comment so I'll just go ahead and make it an answer.

List<Object[]> resultList = new ArrayList(); // CREATE an empty ArrayList object
resultList  = query.getResultList(); // getResultList ALSO returns its own ArrayList object

And since you assign the list that getResultList() returns to the same variable as you used for your own empty ArrayList, your application loses any connection to your own empty ArrayList and Java will collect it as garbage. Essentially you created it for absolutely no purpose.

what JB Nizet posted is enough.

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



回答3:


I have done something similar since I was using JPA 1 at that time:

    final Collection<YourType> typedResult = new ArrayList<YourType> 
    for(final Object result : query.getResultList()) 
    { 
         typedResult.add((YourType) result); 
    }  
    return typedResult; 



回答4:


 List<GmaThresholdParamerter> result= query.getResultList();
   for( GmaThresholdParamerter res : result)
   {
     System.out.println("" +res.getMinNumberOc());
     System.out.println("" +res.getMinDurationOc());
  }


来源:https://stackoverflow.com/questions/20901282/jpa-query-getresultlist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!