public class HibernateBug {
record R1(String a) {
}
record R2(String a, String b) {
}
@Test
public void testWorks1ParamOrder() {
try (EntityManagerFactory emf = RepositoryUtil.createEntityManagerFactory()) {
try (EntityManager em = emf.createEntityManager()) {
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> critQuery = criteriaBuilder.createTupleQuery();
Root<TaskEntity> root = critQuery.from(TaskEntity.class);
critQuery.multiselect(criteriaBuilder.construct(R1.class, root.get("id")));
critQuery.orderBy(criteriaBuilder.asc(root.get("id")));
em.createQuery(critQuery).getResultList();
}
}
}
@Test
public void testWorks2ParamsNoOrder() {
try (EntityManagerFactory emf = RepositoryUtil.createEntityManagerFactory()) {
try (EntityManager em = emf.createEntityManager()) {
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> critQuery = criteriaBuilder.createTupleQuery();
Root<TaskEntity> root = critQuery.from(TaskEntity.class);
critQuery.multiselect(criteriaBuilder.construct(R2.class, root.get("id"), root.get("id")));
em.createQuery(critQuery).getResultList();
}
}
}
@Test
public void testFail2ParamsOrder() {
try (EntityManagerFactory emf = RepositoryUtil.createEntityManagerFactory()) {
try (EntityManager em = emf.createEntityManager()) {
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> critQuery = criteriaBuilder.createTupleQuery();
Root<TaskEntity> root = critQuery.from(TaskEntity.class);
critQuery.multiselect(criteriaBuilder.construct(R2.class, root.get("id"), root.get("id")));
critQuery.orderBy(criteriaBuilder.asc(root.get("id")));
em.createQuery(critQuery).getResultList();
}
}
}
}