@Test public void testQueryWithDeleted() { // Selecting all entities, also the deleted ones List entities = getAuditReader().createQuery().forRevisionsOfEntity( PrimitiveTestEntity.class, true, true ) .getResultList(); assert entities.size() == 3; assert entities.get( 0 ).equals( new PrimitiveTestEntity( id1, 10, 0 ) ); assert entities.get( 1 ).equals( new PrimitiveTestEntity( id1, 20, 0 ) ); assert entities.get( 2 ).equals( new PrimitiveTestEntity( id1, 0, 0 ) ); } }
/** * Creates a query, which will return entities satisfying some conditions (specified later), * at a given revision and a given entityName. Deleted entities are not included. * * @param c Class of the entities for which to query. * @param entityName Name of the entity (if can't be guessed basing on the {@code c}). * @param revision Revision number at which to execute the query. * * @return A query for entities at a given revision, to which conditions can be added and which * can then be executed. The result of the query will be a list of entities (beans), unless a * projection is added. */ public AuditQuery forEntitiesAtRevision(Class<?> c, String entityName, Number revision) { return forEntitiesAtRevision( c, entityName, revision, false ); }
@Override @SuppressWarnings({"unchecked"}) public List<Object> findEntities(Number revision) throws IllegalStateException, IllegalArgumentException { final Set<Pair<String, Class>> entityTypes = findEntityTypes( revision ); final List<Object> result = new ArrayList<>(); for ( Pair<String, Class> type : entityTypes ) { result.addAll( auditReaderImplementor.createQuery().forEntitiesModifiedAtRevision( type.getSecond(), type.getFirst(), revision ) .getResultList() ); } return result; }
.forEntitiesAtRevision( proxySte.getClass(), 1 ) .getResultList(); Assert.assertEquals( Arrays.asList( originalSte ), entities ); .forRevisionsOfEntity( proxySte.getClass(), true, false ) .getSingleResult(); Assert.assertEquals( originalSte, ste ); .forEntitiesModifiedAtRevision( proxySte.getClass(), 1 ) .getSingleResult(); Assert.assertEquals( originalSte, ste );
@Override public AuditQueryCreator createQuery() { return new AuditQueryCreator( enversService, this ); }
@Test public void testRevisionsOfEntityWithoutDelete() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) .add( AuditEntity.id().eq( id2 ) ) .getResultList(); assert result.size() == 1; assert ((Object[]) result.get( 0 ))[0].equals( new StrIntTestEntity( "b", 11, id2 ) ); assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() == 1; assert ((Object[]) result.get( 0 ))[2].equals( RevisionType.ADD ); } }
@Test public void testPolymorphicQuery() { ParentEntity parentVer1 = new ParentEntity( id1, "x" ); assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() .equals( parentVer1 ); assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) .getResultList().size() == 0; } }
@Override @SuppressWarnings({"unchecked"}) public Map<RevisionType, List<Object>> findEntitiesGroupByRevisionType(Number revision) throws IllegalStateException, IllegalArgumentException { final Set<Pair<String, Class>> entityTypes = findEntityTypes( revision ); final Map<RevisionType, List<Object>> result = new HashMap<>(); for ( RevisionType revisionType : RevisionType.values() ) { result.put( revisionType, new ArrayList<>() ); for ( Pair<String, Class> type : entityTypes ) { final List<Object> list = auditReaderImplementor.createQuery() .forEntitiesModifiedAtRevision( type.getSecond(), type.getFirst(), revision ) .add( new RevisionTypeAuditExpression( null, revisionType, "=" ) ) .getResultList(); result.get( revisionType ).addAll( list ); } } return result; }
@Test public void testEmptyRevisionOfEntityQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .getResultList(); assert result.size() == 7; }
@Test public void testPolymorphicQuery() { ChildEntity childVer1 = new ChildEntity( id1, "x", null ); assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() .equals( childVer1 ); assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() .equals( childVer1 ); } }
@Override @SuppressWarnings({"unchecked"}) public List<Object> findEntities(Number revision, RevisionType revisionType) throws IllegalStateException, IllegalArgumentException { final Set<Pair<String, Class>> entityTypes = findEntityTypes( revision ); final List<Object> result = new ArrayList<>(); for ( Pair<String, Class> type : entityTypes ) { result.addAll( auditReaderImplementor.createQuery().forEntitiesModifiedAtRevision( type.getSecond(), type.getFirst(), revision ) .add( new RevisionTypeAuditExpression( null, revisionType, "=" ) ).getResultList() ); } return result; }
@Test public void testRevisionsPropertyEqQuery() { List revs_id1 = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .add( AuditEntity.id().eq( id1 ) ) .getResultList(); Assert.assertEquals( 2, revs_id1.size() ); Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 0 ))[0] ); Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 1 ))[0] ); }
@Test public void testPolymorphicQuery() { ChildEntity childVer1 = new ChildEntity( id1, "x", 1l ); assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() .equals( childVer1 ); assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() .equals( childVer1 ); } }
@Test public void testNoEntitiesModifiedAtRevision() { List result = getAuditReader().createQuery() .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 5 ) .getResultList(); Assert.assertTrue( result.isEmpty() ); }
@Test public void testRevisionsOfId1Query() { List<Object[]> result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .add( AuditEntity.id().eq( id1 ) ) .getResultList(); assert result.get( 0 )[0].equals( new StrIntTestEntity( "a", 10, id1 ) ); assert result.get( 0 )[1] instanceof CustomRevEntity; assert ((CustomRevEntity) result.get( 0 )[1]).getCustomId() == 1; assert result.get( 1 )[0].equals( new StrIntTestEntity( "c", 10, id1 ) ); assert result.get( 1 )[1] instanceof CustomRevEntity; assert ((CustomRevEntity) result.get( 1 )[1]).getCustomId() == 2; }
@Test public void testPolymorphicQuery() { ParentEntity parentVer1 = new ParentEntity( id1, "x" ); assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() .equals( parentVer1 ); assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) .getResultList().size() == 0; } }
@Test public void testEntityNotModifiedAtRevision() { List result = getAuditReader().createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, 3 ) .add( AuditEntity.id().eq( id1 ) ).getResultList(); Assert.assertTrue( result.isEmpty() ); }
@Test public void testHasChangedHasNotChangedCriteria() throws Exception { List list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) .add( AuditEntity.property( "str1" ).hasChanged() ).getResultList(); assertEquals( 2, list.size() ); assertEquals( "str1", ((AuditedTestEntity) list.get( 0 )).getStr1() ); assertEquals( "str2", ((AuditedTestEntity) list.get( 1 )).getStr1() ); list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) .add( AuditEntity.property( "str1" ).hasNotChanged() ).getResultList(); assertTrue( list.isEmpty() ); }
@Test public void testPolymorphicQuery() { ParentEntity parentVer1 = new ParentEntity( id1, "x" ); assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() .equals( parentVer1 ); assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) .getResultList().size() == 0; } }
@Test @TestForIssue(jiraKey = "HHH-11558") public void testForEntitiesModifiedAtRevisionNotAuditedMultipleResults() { try { getAuditReader().createQuery() .forEntitiesModifiedAtRevision( NonAuditedEntity.class, 1 ) .getResultList(); fail( "Expected a NotAuditedException" ); } catch ( Exception e ) { assertTyping( NotAuditedException.class, e ); } }