/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.envers.test.integration.query; import java.util.Arrays; import java.util.List; import javax.persistence.EntityManager; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.entities.IntTestEntity; import org.junit.Test; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings({"unchecked"}) public class OrderByLimitQuery extends BaseEnversJPAFunctionalTestCase { private Integer id1; private Integer id2; private Integer id3; private Integer id4; private Integer id5; @Override protected Class<?>[] getAnnotatedClasses() { return new Class[] {IntTestEntity.class}; } @Test @Priority(10) public void initData() { // Revision 1 EntityManager em = getEntityManager(); em.getTransaction().begin(); IntTestEntity ite1 = new IntTestEntity( 12 ); IntTestEntity ite2 = new IntTestEntity( 5 ); IntTestEntity ite3 = new IntTestEntity( 8 ); IntTestEntity ite4 = new IntTestEntity( 1 ); em.persist( ite1 ); em.persist( ite2 ); em.persist( ite3 ); em.persist( ite4 ); id1 = ite1.getId(); id2 = ite2.getId(); id3 = ite3.getId(); id4 = ite4.getId(); em.getTransaction().commit(); // Revision 2 em.getTransaction().begin(); IntTestEntity ite5 = new IntTestEntity( 3 ); em.persist( ite5 ); id5 = ite5.getId(); ite1 = em.find( IntTestEntity.class, id1 ); ite1.setNumber( 0 ); ite4 = em.find( IntTestEntity.class, id4 ); ite4.setNumber( 15 ); em.getTransaction().commit(); } @Test public void testEntitiesOrderLimitByQueryRev1() { List res_0_to_1 = getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 1 ) .addOrder( AuditEntity.property( "number" ).desc() ) .setFirstResult( 0 ) .setMaxResults( 2 ) .getResultList(); List res_2_to_3 = getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 1 ) .addOrder( AuditEntity.property( "number" ).desc() ) .setFirstResult( 2 ) .setMaxResults( 2 ) .getResultList(); List res_empty = getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 1 ) .addOrder( AuditEntity.property( "number" ).desc() ) .setFirstResult( 4 ) .setMaxResults( 2 ) .getResultList(); assert Arrays.asList( new IntTestEntity( 12, id1 ), new IntTestEntity( 8, id3 ) ).equals( res_0_to_1 ); assert Arrays.asList( new IntTestEntity( 5, id2 ), new IntTestEntity( 1, id4 ) ).equals( res_2_to_3 ); assert Arrays.asList().equals( res_empty ); } @Test public void testEntitiesOrderLimitByQueryRev2() { List res_0_to_1 = getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 2 ) .addOrder( AuditEntity.property( "number" ).desc() ) .setFirstResult( 0 ) .setMaxResults( 2 ) .getResultList(); List res_2_to_3 = getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 2 ) .addOrder( AuditEntity.property( "number" ).desc() ) .setFirstResult( 2 ) .setMaxResults( 2 ) .getResultList(); List res_4 = getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 2 ) .addOrder( AuditEntity.property( "number" ).desc() ) .setFirstResult( 4 ) .setMaxResults( 2 ) .getResultList(); assert Arrays.asList( new IntTestEntity( 15, id4 ), new IntTestEntity( 8, id3 ) ).equals( res_0_to_1 ); assert Arrays.asList( new IntTestEntity( 5, id2 ), new IntTestEntity( 3, id5 ) ).equals( res_2_to_3 ); assert Arrays.asList( new IntTestEntity( 0, id1 ) ).equals( res_4 ); } }