Hibernate CriteriaBuilder Заявления о делах: Как получить зарплату avg () на основе условия Использование CriteriaBuilder с оператором Case.? - PullRequest
0 голосов
/ 11 сентября 2018

Я новичок в Hibernate и хочу выполнить запрос ниже MySQL с использованием критерия HibernateBuilder.

mysql> select avg(case when id=1 then 30 when id=2 then 30 else 0 end) as avg_age from student;

Что я пробовал:

    CriteriaBuilder builder = HibernateUtil.getCriteriaBuilder();
        EntityManager em = HibernateUtil.getEntityManager();
CriteriaQuery<Object[]> query = builder.createQuery(Object[].class);
Root<Student> teacher = query.from(Student.class);
    query.multiselect(builder.avg(
        teacher.get("salary")),
         builder.selectCase()
        .when(builder.equal(teacher.get("id"), 1), 30)
        .when(builder.equal(teacher.get("id"), 2), 30)
        .otherwise(0));

    List<Object[]> results = em.createQuery(query).getResultList();
    for(Object[] object: results){
        System.out.println("Avg Salary = " + object[0] );
    }

    }

Он выполняет отдельно функцию avg () и оператор case. У меня есть таблица ученика с идентификатором, возрастом, зарплатой, именем, добавляет столбцы, я хочу, чтобы avg () зарплата ученика, но для тех, у кого id (1 и 2) установлена ​​зарплата 30, а для других 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...