0

NamedQuery から整数を取得できませんか???

@NamedQuery(    name = Comm.COUNTLIKEVALUEINHOLDER,
        query = "SELECT COUNT(c.id) " +
            "FROM Comm c " +
            "JOIN c.element e " +
            "WHERE c.search1 LIKE :search1 " +
            "AND c.search2 = :search2 " +
            "AND c.type = :type " +
            "AND e.holderelement = :holder"
    )

Object q = em.createNamedQuery(Comm.COUNTLIKEVALUEINHOLDER)
    .setParameter("search1", "bla%")
    .setParameter("search2", "bla2")
    .setParameter("type", t)
    .setParameter("holder", h)
    .getSingleResult();

COUNT Aggregat から Long や Integer ではなく、Entity を取得します。

しかし、ここでは整数が返されます。まったく同じクエリです。

Object i = em.createQuery("SELECT COUNT(c.id) " +
    "FROM Comm c " +
    "JOIN c.element e " +
    "WHERE c.search1 LIKE :search1 " +
    "AND c.search2 = :search2 " +
    "AND c.type = :type " +
    "AND e.holderelement = :holder")
    .setParameter("search1", "bla%")
    .setParameter("search2", "bla2")
    .setParameter("type", t)
    .setParameter("holder", h)
    .getSingleResult();

誰かアイデアがありますか?

4

1 に答える 1

1

簡潔な答え:

em.createQuery は、動的クエリの作成に使用されます。戻り値の型は、QL 言語の戻り値の型 (上記の例では「SELECT COUNT(c.id)」) によって決まります。

em.createNamedQuery は、静的クエリの作成に使用されます。戻り値の型は型キャストできます。次に例を示します。

Object q = em.createNamedQuery(Comm.COUNTLIKEVALUEINHOLDER)
   .setParameter("search1", "bla%")
   .setParameter("search2", "bla2")
   .setParameter("type", t)
   .setParameter("holder", h)
   .getSingleResult();

Integer count = (Integer) q;

` 参照: http://www.objectdb.com/java/jpa/query/api

于 2013-12-08T15:59:16.740 に答える