Я новичок в 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.