Java EE getResultList()只返回对象不相关的类类型对象

时间:2013-03-27 09:04:37

标签: database java-ee object jpa jpql

我正在使用此代码从数据库中检索对象。此代码返回一个对象,但该对象的类型只是Object

但我希望返回Pcinitialdata类型。如上所述,它仅返回Object,其类型为Object

我该如何解决这个问题?

String qryStrforCom = "select pci.fileNo,pci.projectNo,pci.fundId,pci.decrp,pci.devSec,pci.estBy,pci.areaCode,pci.targetDate,pci.jobnoRecedate,pci.conBy,pci.supBy,pci.ht33,pci.lt11,pci.sub11,pci.lt3Phase,pci.ltsPhase,pci.abc5w,pci.abc4w,pci.abcsecct,pci.perCapacity,pci.newCapacity,pci.proLtrToEsOn,pci.stdCost,pci.detailCost,pci.varianceNew from Pcinitialdata pci where TRIM(pci.estNo) = :value";

Query querycom = getEntityManager(webAppName).createQuery(qryStrforCom);
querycom.setParameter("value", value);
List<Pcinitialdata> listCom=querycom.getResultList();
if (listCom.isEmpty()) {
    return null;
}
return listCom;

1 个答案:

答案 0 :(得分:3)

createQuery方法一起使用的查询语言是JPQL,而不是SQL。

在JPQL中,您可以直接查询实体,而无需列出所有单个属性。支持列出它们,但结果是单独的属性列表而不是单个实体。

此外,如果您至少使用JPA 2.0(Java EE 6),则可以在构造Query对象时输入类类型。然后代码将成为:

String qryStrforCom = "select pci from Pcinitialdata pci where TRIM(pci.estNo) = :value";
TypedQuery<Pcinitialdata> querycom = getEntityManager(webAppName).createQuery(qryStrforCom, Pcinitialdata.class);
querycom.setParameter("value", value);
List<Pcinitialdata> listCom = querycom.getResultList();
if (listCom.isEmpty()) {
    return null;
}

return listCom;

请注意,使用JPA,您可以链接调用,并且通常最好使用空列表而不是null。事先声明查询either in XML or via an annotation也更方便。最后,尝试减少使用的缩写并为变量提供有意义的名称(例如value如果用于estNo等,则不应调用它。)

您的代码将变为简单:

return getEntityManager(webAppName)
    .createNamedQuery("Pcinitialdata.byEstNo", Pcinitialdata.class)
    .setParameter("estNo", estNo)
    .getResultList();