Java JPA query.getResultList()?
我使用JPA1.0: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.
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());
}