Как установить несколько критериев, таких как SUM, MAX, AVG и распечатать его в спящем шаблоне - PullRequest
0 голосов
/ 15 ноября 2018

Здравствуйте, я пытаюсь получить max, avg, сумму "productCount". Я пишу этот код. Я не могу найти, что сделать, чтобы это исправить.

Запрос к базе данных : select sum(product.PRODUCT_COUNT), avg(product.PRODUCT_COUNT), max(product.PRODUCT_COUNT) from product where product.PRODUCT_COUNT>5;

Java-код :

    HibernateTemplate template = getHibernateTemplate();
    DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);
    ProjectionList projectionList = Projections.projectionList();
    projectionList.add(Projections.max("productCount"));
    projectionList.add(Projections.avg("productCount"));
    projectionList.add(Projections.avg("productCount"));

    criteria.add(Restrictions.gt("productCount", 4));
    criteria.setProjection(projectionList);

    List<?> list = template.findByCriteria(criteria);
    System.out.println(list.get(0));
    System.out.println(list.get(1));
    System.out.println(list.get(2));

Отображение гибернации :

<hibernate-mapping>
<class name="com.i2gether.hibernate.model.Product" table="PRODUCT">

    <id name="id" column="ID">
        <generator class="native"/>
    </id>
    <property name="productID" type="string" column="PRODUCT_ID"/>
    <property name="productName" type="string" column="PRODUCT_NAME"/>
    <property name="productDescription" type="string" column="PRODUCT_DESCRIPTION"/>
    <property name="productCount" type="int" column="PRODUCT_COUNT"/>
    <property name="buyingDate" type="timestamp" column="BUYING_DATE"/>

</class></hibernate-mapping>

Но я не получил результат, который хотел. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 15 ноября 2018

Я думаю, что вы пропустили несколько вещей по вашему Db-запросу, как я уже упоминал в комментариях. вместо использования 2 раз avg замените на sum и измените свое большее условие с 4 на 5. Я упомянул ниже для вашей справки

HibernateTemplate template = getHibernateTemplate();
    DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);
    ProjectionList projectionList = Projections.projectionList();
    projectionList.add(Projections.max("productCount"));
    projectionList.add(Projections.avg("productCount"));
    projectionList.add(Projections.sum("productCount"));

    criteria.add(Restrictions.gt("productCount", 5));
    criteria.setProjection(projectionList);

    List<?> list = template.findByCriteria(criteria);
    System.out.println(list.get(0));
    System.out.println(list.get(1));
    System.out.println(list.get(2));
...