Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA Eclipselink NamedQuery与查询计数_Java_Jpa_Eclipselink - Fatal编程技术网

Java JPA Eclipselink NamedQuery与查询计数

Java JPA Eclipselink NamedQuery与查询计数,java,jpa,eclipselink,Java,Jpa,Eclipselink,无法从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 =

无法从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();
我从计数聚合中得到一个实体,而不是一个长或整数

但这里我得到了一个整数。这是完全相同的查询

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();
有人有想法吗?

简短回答:

createQuery用于创建动态查询。返回类型由QL语言的返回类型决定(在上面的示例中为“selectcount(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;
` 另见: