Search in sources :

Example 16 with JpaRoot

use of org.hibernate.query.criteria.JpaRoot in project hibernate-orm by hibernate.

the class AbstractQueryCacheResultTransformerTest method testEntityWithJoinFetchedLazyManyToOneList.

@Test
public void testEntityWithJoinFetchedLazyManyToOneList(SessionFactoryScope scope) throws Exception {
    // unaliased
    CriteriaExecutor criteriaExecutorUnaliased = new CriteriaExecutor() {

        @Override
        protected ResultTransformer getResultTransformer() {
            return null;
        }

        @Override
        protected JpaCriteriaQuery getCriteria(Session s) {
            CriteriaBuilder builder = s.getCriteriaBuilder();
            JpaCriteriaQuery<Student> criteria = (JpaCriteriaQuery<Student>) builder.createQuery(Student.class);
            JpaRoot<Student> root = criteria.from(Student.class);
            root.fetch("preferredCourse", JoinType.LEFT);
            criteria.orderBy(builder.asc(root.get("studentNumber")));
            return criteria;
        // return s.createCriteria( Student.class, "s" )
        // .setFetchMode( "preferredCourse", FetchMode.JOIN )
        // .addOrder( Order.asc( "s.studentNumber") );
        }
    };
    HqlExecutor hqlExecutorUnaliased = new HqlExecutor() {

        @Override
        public Query getQuery(Session s) {
            return s.createQuery("from Student s left join fetch s.preferredCourse order by s.studentNumber");
        }
    };
    HqlExecutor hqlExecutorAliased = new HqlExecutor() {

        @Override
        public Query getQuery(Session s) {
            return s.createQuery("from Student s left join fetch s.preferredCourse pCourse order by s.studentNumber");
        }
    };
    ResultChecker checker = results -> {
        List resultList = (List) results;
        assertEquals(2, resultList.size());
        assertEquals(yogiExpected, resultList.get(0));
        assertEquals(shermanExpected, resultList.get(1));
        assertEquals(yogiExpected.getPreferredCourse().getCourseCode(), ((Student) resultList.get(0)).getPreferredCourse().getCourseCode());
        assertNull(((Student) resultList.get(1)).getPreferredCourse());
    };
    runTest(hqlExecutorUnaliased, criteriaExecutorUnaliased, checker, false, scope);
    runTest(hqlExecutorAliased, null, checker, false, scope);
}
Also used : CriteriaBuilder(jakarta.persistence.criteria.CriteriaBuilder) BasicTypeImpl(org.hibernate.type.internal.BasicTypeImpl) ServiceRegistry(org.hibernate.testing.orm.junit.ServiceRegistry) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) JoinType(jakarta.persistence.criteria.JoinType) JpaSelection(org.hibernate.query.criteria.JpaSelection) AvailableSettings(org.hibernate.cfg.AvailableSettings) Assertions.assertNotEquals(org.junit.jupiter.api.Assertions.assertNotEquals) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) Session(org.hibernate.Session) Constructor(java.lang.reflect.Constructor) ArrayList(java.util.ArrayList) HibernateProxy(org.hibernate.proxy.HibernateProxy) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) Map(java.util.Map) Query(org.hibernate.query.Query) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) SessionFactoryImplementor(org.hibernate.engine.spi.SessionFactoryImplementor) Order(jakarta.persistence.criteria.Order) BigIntJdbcType(org.hibernate.type.descriptor.jdbc.BigIntJdbcType) Transformers(org.hibernate.transform.Transformers) Iterator(java.util.Iterator) ListJoin(jakarta.persistence.criteria.ListJoin) ReflectHelper(org.hibernate.internal.util.ReflectHelper) DomainModel(org.hibernate.testing.orm.junit.DomainModel) AliasToBeanConstructorResultTransformer(org.hibernate.transform.AliasToBeanConstructorResultTransformer) Selection(jakarta.persistence.criteria.Selection) CacheMode(org.hibernate.CacheMode) Assertions.assertSame(org.junit.jupiter.api.Assertions.assertSame) JpaCriteriaQuery(org.hibernate.query.criteria.JpaCriteriaQuery) Test(org.junit.jupiter.api.Test) MapJoin(jakarta.persistence.criteria.MapJoin) List(java.util.List) Root(jakarta.persistence.criteria.Root) SessionFactoryScope(org.hibernate.testing.orm.junit.SessionFactoryScope) CriteriaBuilder(jakarta.persistence.criteria.CriteriaBuilder) JpaRoot(org.hibernate.query.criteria.JpaRoot) LongJavaType(org.hibernate.type.descriptor.java.LongJavaType) Setting(org.hibernate.testing.orm.junit.Setting) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) AliasToEntityMapResultTransformer(org.hibernate.transform.AliasToEntityMapResultTransformer) SessionFactory(org.hibernate.testing.orm.junit.SessionFactory) Path(jakarta.persistence.criteria.Path) Hibernate(org.hibernate.Hibernate) ResultTransformer(org.hibernate.transform.ResultTransformer) Type(org.hibernate.type.Type) Join(jakarta.persistence.criteria.Join) ArrayList(java.util.ArrayList) List(java.util.List) JpaCriteriaQuery(org.hibernate.query.criteria.JpaCriteriaQuery) Session(org.hibernate.Session) Test(org.junit.jupiter.api.Test)

Example 17 with JpaRoot

use of org.hibernate.query.criteria.JpaRoot in project hibernate-orm by hibernate.

the class AbstractQueryCacheResultTransformerTest method testAliasToEntityMapMultiProjectionList.

@Test
public void testAliasToEntityMapMultiProjectionList(SessionFactoryScope scope) throws Exception {
    CriteriaExecutor criteriaExecutor = new CriteriaExecutor() {

        @Override
        protected JpaCriteriaQuery getCriteria(Session s) {
            CriteriaBuilder builder = s.getCriteriaBuilder();
            JpaCriteriaQuery criteria = (JpaCriteriaQuery) builder.createQuery();
            final JpaRoot<Enrolment> root = criteria.from(Enrolment.class);
            criteria.multiselect(root.get("student").alias("student"), root.get("semester").alias("semester"), root.get("year").alias("year"), root.get("course").alias("course"));
            criteria.orderBy(builder.asc(root.get("studentNumber")));
            return criteria;
        // return s.createCriteria( Enrolment.class, "e" )
        // .setProjection(
        // Projections.projectionList()
        // .add( Property.forName( "e.student" ), "student" )
        // .add( Property.forName( "e.semester" ), "semester" )
        // .add( Property.forName( "e.year" ), "year" )
        // .add( Property.forName( "e.course" ), "course" )
        // )
        // .addOrder( Order.asc( "studentNumber") )
        // .setResultTransformer( Transformers.ALIAS_TO_ENTITY_MAP );
        }
    };
    HqlExecutor hqlExecutor = new HqlExecutor() {

        @Override
        public Query getQuery(Session s) {
            return s.createQuery("select e.student as student, e.semester as semester, e.year as year, e.course as course from Enrolment e order by e.studentNumber").setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        }
    };
    ResultChecker checker = results -> {
        List resultList = (List) results;
        assertEquals(2, resultList.size());
        Map yogiMap = (Map) resultList.get(0);
        Map shermanMap = (Map) resultList.get(1);
        assertEquals(4, yogiMap.size());
        assertEquals(4, shermanMap.size());
        assertTrue(yogiMap.get("student") instanceof Student);
        assertTrue(shermanMap.get("student") instanceof Student);
        // TODO: following are initialized for hql and uninitialied for criteria; why?
        // assertFalse( Hibernate.isInitialized( yogiMap.get( "student" ) ) );
        // assertFalse( Hibernate.isInitialized( shermanMap.get( "student" ) ) );
        assertEquals(yogiExpected.getStudentNumber(), ((Student) yogiMap.get("student")).getStudentNumber());
        assertEquals(shermanExpected.getStudentNumber(), ((Student) shermanMap.get("student")).getStudentNumber());
        assertEquals(yogiEnrolmentExpected.getSemester(), yogiMap.get("semester"));
        assertEquals(yogiEnrolmentExpected.getYear(), yogiMap.get("year"));
        assertEquals(courseExpected, yogiMap.get("course"));
        assertEquals(shermanEnrolmentExpected.getSemester(), shermanMap.get("semester"));
        assertEquals(shermanEnrolmentExpected.getYear(), shermanMap.get("year"));
        assertEquals(courseExpected, shermanMap.get("course"));
    };
    runTest(hqlExecutor, criteriaExecutor, checker, false, scope);
}
Also used : CriteriaBuilder(jakarta.persistence.criteria.CriteriaBuilder) BasicTypeImpl(org.hibernate.type.internal.BasicTypeImpl) ServiceRegistry(org.hibernate.testing.orm.junit.ServiceRegistry) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) JoinType(jakarta.persistence.criteria.JoinType) JpaSelection(org.hibernate.query.criteria.JpaSelection) AvailableSettings(org.hibernate.cfg.AvailableSettings) Assertions.assertNotEquals(org.junit.jupiter.api.Assertions.assertNotEquals) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) Session(org.hibernate.Session) Constructor(java.lang.reflect.Constructor) ArrayList(java.util.ArrayList) HibernateProxy(org.hibernate.proxy.HibernateProxy) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) Map(java.util.Map) Query(org.hibernate.query.Query) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) SessionFactoryImplementor(org.hibernate.engine.spi.SessionFactoryImplementor) Order(jakarta.persistence.criteria.Order) BigIntJdbcType(org.hibernate.type.descriptor.jdbc.BigIntJdbcType) Transformers(org.hibernate.transform.Transformers) Iterator(java.util.Iterator) ListJoin(jakarta.persistence.criteria.ListJoin) ReflectHelper(org.hibernate.internal.util.ReflectHelper) DomainModel(org.hibernate.testing.orm.junit.DomainModel) AliasToBeanConstructorResultTransformer(org.hibernate.transform.AliasToBeanConstructorResultTransformer) Selection(jakarta.persistence.criteria.Selection) CacheMode(org.hibernate.CacheMode) Assertions.assertSame(org.junit.jupiter.api.Assertions.assertSame) JpaCriteriaQuery(org.hibernate.query.criteria.JpaCriteriaQuery) Test(org.junit.jupiter.api.Test) MapJoin(jakarta.persistence.criteria.MapJoin) List(java.util.List) Root(jakarta.persistence.criteria.Root) SessionFactoryScope(org.hibernate.testing.orm.junit.SessionFactoryScope) CriteriaBuilder(jakarta.persistence.criteria.CriteriaBuilder) JpaRoot(org.hibernate.query.criteria.JpaRoot) LongJavaType(org.hibernate.type.descriptor.java.LongJavaType) Setting(org.hibernate.testing.orm.junit.Setting) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) AliasToEntityMapResultTransformer(org.hibernate.transform.AliasToEntityMapResultTransformer) SessionFactory(org.hibernate.testing.orm.junit.SessionFactory) Path(jakarta.persistence.criteria.Path) Hibernate(org.hibernate.Hibernate) ResultTransformer(org.hibernate.transform.ResultTransformer) Type(org.hibernate.type.Type) Join(jakarta.persistence.criteria.Join) ArrayList(java.util.ArrayList) List(java.util.List) JpaCriteriaQuery(org.hibernate.query.criteria.JpaCriteriaQuery) Map(java.util.Map) Session(org.hibernate.Session) Test(org.junit.jupiter.api.Test)

Aggregations

Path (jakarta.persistence.criteria.Path)17 JpaCriteriaQuery (org.hibernate.query.criteria.JpaCriteriaQuery)17 JpaRoot (org.hibernate.query.criteria.JpaRoot)17 CriteriaBuilder (jakarta.persistence.criteria.CriteriaBuilder)16 Join (jakarta.persistence.criteria.Join)16 JoinType (jakarta.persistence.criteria.JoinType)16 ListJoin (jakarta.persistence.criteria.ListJoin)16 MapJoin (jakarta.persistence.criteria.MapJoin)16 Order (jakarta.persistence.criteria.Order)16 Root (jakarta.persistence.criteria.Root)16 Selection (jakarta.persistence.criteria.Selection)16 Constructor (java.lang.reflect.Constructor)16 ArrayList (java.util.ArrayList)16 Iterator (java.util.Iterator)16 List (java.util.List)16 Map (java.util.Map)16 CacheMode (org.hibernate.CacheMode)16 Hibernate (org.hibernate.Hibernate)16 Session (org.hibernate.Session)16 AvailableSettings (org.hibernate.cfg.AvailableSettings)16