{
FullTextSession session = Search.getFullTextSession( openSession() );
try {
Transaction tx = session.beginTransaction();
AuditReader auditReader = AuditReaderFactory.get( session );
//Let's assert that Hibernate Envers has audited everything correctly
assertEquals( 1, findLastRevisionForEntity( auditReader, Person.class ) );
assertEquals( 2, findLastRevisionForEntity( auditReader, Address.class ) );
assertEquals( 0, howManyEntitiesChangedAtRevisionNumber( auditReader, Person.class, 2 ) );
assertEquals( 1, howManyEntitiesChangedAtRevisionNumber( auditReader, Address.class, 2 ) );
assertEquals( 2, howManyAuditedObjectsSoFar( auditReader, Person.class ) );
assertEquals( 3, howManyAuditedObjectsSoFar( auditReader, Address.class ) );
@SuppressWarnings("unchecked")
List<Address> houseNumberAddressChangedAtRevision2 = auditReader.createQuery()
.forEntitiesModifiedAtRevision( Address.class, 2 )
.add( AuditEntity.property( "houseNumber" ).hasChanged() )
.add( AuditEntity.property( "flatNumber" ).hasChanged() )
.add( AuditEntity.property( "streetName" ).hasNotChanged() ).getResultList();
assertEquals( 1, houseNumberAddressChangedAtRevision2.size() );