我正在使用此代码从数据库中检索对象。此代码返回一个对象,但该对象的类型只是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;
答案 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();