1

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

但是,我想返回 type 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;
4

1 回答 1

3

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

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

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

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 会更好。预先声明您的查询也更方便,无论是在 XML 中还是通过注释。最后,尽量减少使用的缩写,并给你的变量起有意义的名字(例如value,如果它用于 等,则不应这样称呼estNo

您的代码将变得简单:

return getEntityManager(webAppName)
    .createNamedQuery("Pcinitialdata.byEstNo", Pcinitialdata.class)
    .setParameter("estNo", estNo)
    .getResultList();
于 2013-03-27T09:31:19.173 回答