私はJPAを初めて使用します。ですから、私の質問はとても単純なものでなければなりません。
以下は、JPAに変換したいSQLの単純なクエリです。私はすでに。というエンティティクラスを持っていますTimeEnt
。
SELECT
SUM(TimeEntryActualHours) as UnBilledHrs,
SUM (TimeEntryAmount) as UnbilledAmount
FROM TimeEnt WHERE MatterID = 200
JPAクエリ言語は、AVG、COUNT、MAX、MIN、SUMなどのSELECT句の集計関数をサポートし、SELECT句の複数のselect_expressionsをサポートします。この場合、結果はList
配列Object
(Object[]
)になります。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);
}
と呼ばれるエンティティがあるとしましょう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();
EJBクエリ言語の仕様を見てください。
このイディオムは、標準SQLと非常によく似ています。
EntityManager em = ...
Query q = em.createQuery ("SELECT AVG(x.price) FROM Magazine x");
Number result = (Number) q.getSingleResult ();
よろしく、