1

このコードを使用して、データベースからオブジェクトを取得しています。このコードはオブジェクトを返しますが、そのオブジェクトのタイプは単なる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;
4

1 に答える 1

3

メソッドで使用されるクエリ言語はcreateQuery、SQLではなくJPQLです。

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 に答える