@Test public void testAuditQueryUsingEmbeddableEquals() { final NameInfo nameInfo = new NameInfo( "John", "Doe" ); final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); query.add( AuditEntity.property( "nameInfo" ).eq( nameInfo ) ); List<?> results = query.getResultList(); assertEquals( 1, results.size() ); final Person person = (Person) results.get( 0 ); assertEquals( nameInfo, person.getNameInfo() ); }
@Test public void shouldFindRevisionBySimpleProperty() { ManyToOneEntity manyToOne = getManyToOneEntity(); ManyToManyEntity manyToMany = getManyToManyEntity(); OneToOneEntity oneToOne = getOneToOneEntity(); PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); //given (and result of shouldInitData() //when List resultList = getAuditReader().createQuery() .forEntitiesAtRevision( PlainEntity.class, 1 ) .add( AuditEntity.property( "component_componentNote" ).eq( "Note" ) ) .getResultList(); Assert.assertEquals( entity, resultList.get( 0 ) ); }
@Test public void testMaximizeRevision() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.revisionNumber().maximize() .add( AuditEntity.property( "number" ).eq( 10 ) ) ) .getResultList(); assert Arrays.asList( 2 ).equals( result ); }
@Test public void testMinimizeWithPropertyEq() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.property( "number" ).minimize() .add( AuditEntity.property( "str1" ).eq( "a" ) ) ) .getResultList(); assert Arrays.asList( 1 ).equals( result ); }
@Test public void testRevisionTypeEqQuery() { // The query shouldn't be ordered as always, otherwise - we get an exception. List results = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) .add( AuditEntity.id().eq( id1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.MOD ) ) .getResultList(); Assert.assertEquals( 3, results.size() ); Assert.assertEquals( new StrIntTestEntity( "d", 10, id1 ), results.get( 0 ) ); Assert.assertEquals( new StrIntTestEntity( "d", 1, id1 ), results.get( 1 ) ); Assert.assertEquals( new StrIntTestEntity( "d", 5, id1 ), results.get( 2 ) ); }
@Test @TestForIssue(jiraKey = "HHH-8567") public void testEmbeddedIdPropertyRestriction() { EmbIdTestEntity ver2 = (EmbIdTestEntity) getAuditReader().createQuery() .forEntitiesAtRevision( EmbIdTestEntity.class, 2 ) .add( AuditEntity.property( "id.x" ).eq( embId1.getX() ) ) .add( AuditEntity.property( "id.y" ).eq( embId1.getY() ) ) .getSingleResult(); Assert.assertEquals( new EmbIdTestEntity( embId1, "something" ), ver2 ); } }
@Test @TestForIssue(jiraKey = "HHH-8567") public void testMultipleIdPropertyRestriction() { MulIdTestEntity ver2 = (MulIdTestEntity) getAuditReader().createQuery() .forEntitiesAtRevision( MulIdTestEntity.class, 2 ) .add( AuditEntity.property( "id1" ).eq( mulId1.getId1() ) ) .add( AuditEntity.property( "id2" ).eq( mulId1.getId2() ) ) .getSingleResult(); Assert.assertEquals( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ), ver2 ); }
@Test public void testDisjunctionOfPropertiesFromDifferentEntities() { AuditReader auditReader = getAuditReader(); // all cars where the owner has an age of 20 or lives in an address with number 30. List<Car> resultList = auditReader.createQuery() .forEntitiesAtRevision( Car.class, 1 ) .traverseRelation( "owner", JoinType.INNER, "p" ) .traverseRelation( "address", JoinType.INNER, "a" ) .up().up().add( AuditEntity.disjunction().add(AuditEntity.property( "p", "age" ) .eq( 20 ) ).add( AuditEntity.property( "a", "number" ).eq( 30 ) ) ) .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); assertEquals( "Expected two cars to be returned, Toyota and VW", 2, resultList.size() ); assertEquals( "Unexpected car at index 0", toyota.getId(), resultList.get(0).getId() ); assertEquals( "Unexpected car at index 1", vw.getId(), resultList.get(1).getId() ); }
@Test public void shouldFindByInternalComponentProperty() { ManyToOneEntity manyToOne = getManyToOneEntity(); ManyToManyEntity manyToMany = getManyToManyEntity(); OneToOneEntity oneToOne = getOneToOneEntity(); PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); //given (and result of shouldInitData() //when List resultList = getAuditReader().createQuery() .forEntitiesAtRevision( PlainEntity.class, 1 ) .add( AuditEntity.property( "component_internalComponent_property" ) .eq( entity.getComponent().getInternalComponent().getProperty() ) ) .getResultList(); Assert.assertEquals( entity, resultList.get( 0 ) ); }
@Test public void testRevisionsLeWithPropertyQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.revisionNumber().le( 3 ) ) .add( AuditEntity.property( "str1" ).eq( "a" ) ) .getResultList(); Assert.assertEquals( Arrays.asList( 1 ), result ); }
@Test @TestForIssue(jiraKey = "HHH-8567") public void testIdPropertyRestriction() { StrIntTestEntity ver2 = (StrIntTestEntity) getAuditReader().createQuery() .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) .add( AuditEntity.property( "id" ).eq( id2 ) ) .getSingleResult(); Assert.assertEquals( new StrIntTestEntity( "a", 20, id2 ), ver2 ); }
@Test public void testElementCollection() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( StringSetEntity.class, false, true ) .add( AuditEntity.id().eq( stringSetId ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 12, getRevisionNumber( objArray[1] ) ); StringSetEntity stringSetEntity = (StringSetEntity) objArray[0]; Assert.assertEquals( TestTools.makeSet( "string 1", "string 2" ), stringSetEntity.getStrings() ); }
@Test public void testLeftJoinOnAuditedEntity() { final AuditReader auditReader = getAuditReader(); // all cars where the owner has an age of 20 or where there is no owner at all List<Car> resultList = auditReader.createQuery() .forEntitiesAtRevision( Car.class, 1 ) .traverseRelation( "owner", JoinType.LEFT, "p" ) .up().add( AuditEntity.or( AuditEntity.property( "p", "age").eq( 20 ), AuditEntity.relatedId( "owner" ).eq( null ) ) ) .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); assertEquals( "The result list should have 2 results, car1 because its owner has an age of 30 and car3 because it has no owner at all", 2, resultList.size() ); Car car0 = resultList.get(0); Car car1 = resultList.get(1); assertEquals( "Unexpected car at index 0", car2.getId(), car0.getId() ); assertEquals( "Unexpected car at index 0", car3.getId(), car1.getId() ); }
@Test @SuppressWarnings("unchecked") public void testSelectDeletedEntitiesBook1() { List<Book> books = (List<Book>) getAuditReader().createQuery() .forRevisionsOfEntity( Book.class, true, true ) .add( AuditEntity.id().eq( bookId1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); assertTrue( !books.isEmpty() ); final Book book = books.get( 0 ); assertNotNull( book.getId() ); assertNotNull( book.getId().getAuthor() ); assertEquals( authorId, book.getId().getAuthor().getId() ); }
@Test @SuppressWarnings("unchecked") public void testSelectDeletedEntitiesBook2() { List<Book> books = (List<Book>) getAuditReader().createQuery() .forRevisionsOfEntity( Book.class, true, true ) .add( AuditEntity.id().eq( bookId2 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); assertTrue( !books.isEmpty() ); final Book book = books.get( 0 ); assertNotNull( book.getId() ); assertNotNull( book.getId().getAuthor() ); assertEquals( authorId, book.getId().getAuthor().getId() ); }
@Test public void testReferencedOneToManyDifferentRevisions() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) .add( AuditEntity.id().eq( 4 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 4, getRevisionNumber( objArray[1] ) ); SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; Assert.assertEquals( "Example Data 2", refIngEntity.getData() ); Hibernate.initialize( refIngEntity.getReference() ); Assert.assertEquals( "Demo Data 2", refIngEntity.getReference().getData() ); }
@Test public void testReferencedOneToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) .add( AuditEntity.id().eq( 2 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; Assert.assertEquals( "Example Data 1", refIngEntity.getData() ); Hibernate.initialize( refIngEntity.getReference() ); Assert.assertEquals( "Demo Data 1", refIngEntity.getReference().getData() ); }
@Test public void testReferringOneToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) .add( AuditEntity.id().eq( 1 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; Assert.assertEquals( "Demo Data 1", refEdEntity.getData() ); Hibernate.initialize( refEdEntity.getReffering() ); Assert.assertEquals( TestTools.makeSet( new SetRefIngEntity( 2, "Example Data 1" ) ), refEdEntity.getReffering() ); }
@Test public void testOwnedManyToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwningEntity.class, false, true ) .add( AuditEntity.id().eq( 5 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; Assert.assertEquals( "Demo Data 1", setOwningEntity.getData() ); Hibernate.initialize( setOwningEntity.getReferences() ); Assert.assertEquals( TestTools.makeSet( new SetOwnedEntity( 6, "Example Data 1" ) ), setOwningEntity.getReferences() ); }
@Test public void testOwningManyToManySameRevision() { List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) .add( AuditEntity.id().eq( 6 ) ) .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) .getResultList(); Object[] objArray = (Object[]) queryResult.get( 0 ); Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; Assert.assertEquals( "Example Data 1", setOwnedEntity.getData() ); Hibernate.initialize( setOwnedEntity.getReferencing() ); Assert.assertEquals( TestTools.makeSet( new SetOwningEntity( 5, "Demo Data 1" ) ), setOwnedEntity.getReferencing() ); }