有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计数休眠和命名查询

我想使用NamedQueries计算表中的元素

NamedQuery是:

@NamedQuery(name = Advertisement.countBySubcategoryList, query = "select count(*) from  Advertisement where subcategoryId IN (:subcategoryId)")

以及:

public static final String countBySubcategoryList = "Advertisement.countBySubcategoryList";

在模型中,我使用:

List<Advertisement> advertisements = session.getNamedQuery(Advertisement.countBySubcategoryList)
            .setParameterList("subcategoryId", subcategoryIds)
            .list();

如何从查询中获取计数值


共 (2) 个答案

  1. # 1 楼答案

    您的查询应该类似于

    select count(a) from Advertisement a where a.subcategoryId IN (:subcategoryId)
    

    你应该这样称呼它

    Long count = (Long)session.getNamedQuery(Advertisement.countBySubcategoryList)
                .setParameterList("subcategoryId", subcategoryIds)
                .uniqueResult();
    

    编辑

    对于这种类型的查询,4之前的Hibernate版本返回了Integer,而不是Long

  2. # 2 楼答案

    如果您是hibernate版本,您甚至可以尝试此功能<;四,

    int count = ((Number)em.createNamedQuery("Advertisement.countBySubcategoryList").getSingleResult()).intValue();

    如果您是hibernate版本>;=4 . @马里克是对的

    Long count = (Long)session.getNamedQuery(Advertisement.countBySubcategoryList) .setParameterList("subcategoryId", subcategoryIds) .uniqueResult();