28

私はJPAを初めて使用します。ですから、私の質問はとても単純なものでなければなりません。

以下は、JPAに変換したいSQLの単純なクエリです。私はすでに。というエンティティクラスを持っていますTimeEnt

SELECT 
     SUM(TimeEntryActualHours) as UnBilledHrs,
     SUM (TimeEntryAmount) as UnbilledAmount
FROM TimeEnt WHERE MatterID = 200
4

3 に答える 3

42

JPAクエリ言語は、AVG、COUNT、MAX、MIN、SUMなどのSELECT句の集計関数をサポートし、SELECT句の複数のselect_expressionsをサポートします。この場合、結果はList配列ObjectObject[])になります。JPA仕様から:

4.8.1SELECT句の結果タイプ

..。

SELECT句の結果タイプは、それに含まれるselect_expressionsの結果タイプによって定義され ます。SELECT句で複数の select_expressionsが使用されている場合、クエリの結果はタイプObject[]であり、この結果の要素は、SELECT句で指定された順序に対応し、タイプは各select_expressionsの結果タイプに対応します。 。

言い換えれば、あなたがコメントで言及した種類のクエリ(そしてあなたがあなたのエンティティを提供しなかったので、私はあなたの例に基づいて私の答えを基にします)はサポートされています、問題ありません。コードサンプルは次のとおりです。

String qlString = "SELECT AVG(x.price), SUM(x.stocks) FROM Magazine x WHERE ...";
Query q = em.createQuery(qlString);
Object[] results = (Object[]) q.getSingleResult();

for (Object object : results) {
    System.out.println(object);
}

参考文献

  • JPA1.0仕様
    • 4.8.1SELECT句の結果タイプ
    • 4.8.4SELECT句の集計関数
于 2010-08-10T19:50:25.193 に答える
9

と呼ばれるエンティティがあるとしましょうProduct

final Query sumQuery = entityManager
                    .createQuery("SELECT SUM(p.price), SUM(p.sale) FROM Product p WHERE p.item=:ITEM AND ....");
sumQuery.setParameter("ITEM","t1");

final Object result= sumQuery.getSingleResult(); // Return an array Object with 2 elements, 1st is sum(price) and 2nd is sum(sale).

//If you have multiple rows;
final Query sumQuery = entityManager
                .createQuery("SELECT SUM(p.price), SUM(p.sale) FROM Product p WHERE p.item in (" + itemlist
                        + ") AND ....");
// Return a list of arrays, where each array correspond to 1 item (row) in resultset.
final List<IEniqDBEntity> sumEntityList = sumQuery.getResultList(); 
于 2012-07-04T16:56:59.493 に答える
5

EJBクエリ言語の仕様を見てください。

このイディオムは、標準SQLと非常によく似ています。

EntityManager em = ...
Query q = em.createQuery ("SELECT AVG(x.price) FROM Magazine x");
Number result = (Number) q.getSingleResult ();

よろしく、

于 2010-08-10T13:59:36.173 に答える