@Test public void testRevisionProjectionQuery() { Object[] result = (Object[]) getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber().max() ) .addProjection( AuditEntity.revisionNumber().count() ) .addProjection( AuditEntity.revisionNumber().countDistinct() ) .addProjection( AuditEntity.revisionNumber().min() ) .add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); Assert.assertEquals( Integer.valueOf( 4 ), result[0] ); Assert.assertEquals( Long.valueOf( 4 ), result[1] ); Assert.assertEquals( Long.valueOf( 4 ), result[2] ); Assert.assertEquals( Integer.valueOf( 1 ), result[3] ); }
@Test public void testEntitiesAvgMaxQuery() { Object[] ver1 = (Object[]) getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 1 ) .addProjection( AuditEntity.property( "number" ).max() ) .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) .getSingleResult(); Object[] ver2 = (Object[]) getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 2 ) .addProjection( AuditEntity.property( "number" ).max() ) .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) .getSingleResult(); Object[] ver3 = (Object[]) getAuditReader().createQuery() .forEntitiesAtRevision( IntTestEntity.class, 3 ) .addProjection( AuditEntity.property( "number" ).max() ) .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) .getSingleResult(); assert (Integer) ver1[0] == 10; assert (Double) ver1[1] == 6.0; assert (Integer) ver2[0] == 10; assert (Double) ver2[1] == 6.0; assert (Integer) ver3[0] == 52; assert (Double) ver3[1] == 20.0; }
/** * It returns the last revision for a specific class. */ private Number findLastRevisionForEntity(AuditReader auditReader, Class<?> clazz) { return (Number) auditReader.createQuery().forRevisionsOfEntity( clazz, false, true ) .addProjection( AuditEntity.revisionNumber().max() ).getSingleResult(); }
/** * Builds the query to get the previous version * * @param reader * @param clazz * @param identifier * @param currentRevision * @return */ public AuditQuery getPreviousVersionQuery(Class<?> clazz, Serializable identifier, int currentRevision) { return readerService.getAuditReader().createQuery().forRevisionsOfEntity(clazz, false, true) .addProjection(AuditEntity.revisionNumber().max()) .add(AuditEntity.id().eq(identifier)) .add(AuditEntity.revisionNumber().lt(currentRevision)); }