@Test public void testAuditQueryWithJoinedInheritanceSubclassPropertyProjectionWithRelationTraversal() { // HHH-11383 // This test was requested by the reporter so that we have a test that shows Hibernate is // automatically adding "INNER JOIN EntityA_AUD" despite the fact whether the query uses // the traverseRelation API or not. This test makes sure that if the SQL generation is // changed in the future, Envers would properly fail if so. List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) .addProjection( property( "name" ) ) .traverseRelation( "relationToC", JoinType.INNER ) .add( property( "foo" ).like( "bar" ) ) .getResultList(); assertEquals( 2, results.size() ); }
@Test public void testAssociationQuery() { final AuditReader auditReader = getAuditReader(); final Car result1 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) .add( AuditEntity.property( "name" ).like( "Ford%" ) ).getSingleResult(); assertEquals( "Unexpected single car at revision 1", ford.getId(), result1.getId() ); Car result2 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) .add( AuditEntity.property( "number" ).eq( 30 ) ).getSingleResult(); assertEquals( "Unexpected single car at revision 1", toyota.getId(), result2.getId() ); List<Car> resultList1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); assertEquals( "Unexpected number of cars for query in revision 1", 2, resultList1.size() ); assertEquals( "Unexpected car at index 0 in revision 1", ford.getId(), resultList1.get( 0 ).getId() ); assertEquals( "Unexpected car at index 1 in revision 2", toyota.getId(), resultList1.get( 1 ).getId() ); Car result3 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() .addOrder( AuditEntity.property( "make" ).asc() ).getSingleResult(); assertEquals( "Unexpected car at revision 2", ford.getId(), result3.getId() ); }
@Test public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsToOne() { List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) .add( disjunction() .add( property( "name" ).like( "b1" ) ) .add( property( "name" ).like( "b2" ) ) ) .traverseRelation( "relationToC", JoinType.INNER ) .add( property( "foo" ).like( "bar" ) ) .up() .traverseRelation( "relationToD", JoinType.INNER ) .add( property( "foo" ).like( "bar" ) ) .getResultList(); assertEquals( 2, results.size() ); }
@Test public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsOneToOne() { List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) .add( disjunction() .add( property( "name" ).like( "b1" ) ) .add( property( "name" ).like( "b2" ) ) ) .traverseRelation( "relationToD", JoinType.INNER ) .add( property( "foo" ).like( "bar" ) ) .getResultList(); assertEquals( 2, results.size() ); }
@Test public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsManyToOne() { List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) .add( disjunction() .add( property( "name" ).like( "b1" ) ) .add( property( "name" ).like( "b2" ) ) ) .traverseRelation( "relationToC", JoinType.INNER ) .add( property( "foo" ).like( "bar" ) ) .getResultList(); assertEquals( 2, results.size() ); }
.traverseRelation( "address", JoinType.INNER ) .traverseRelation( "country", JoinType.INNER ) .add( AuditEntity.property( "name" ).eq( "România" ) ) .getResultList(); .forEntitiesAtRevision( Customer.class, 1 ) .traverseRelation( "address", JoinType.LEFT, "a" ) .add( AuditEntity.or( AuditEntity.property( "a", "city" ).eq( "Cluj-Napoca" ),
.forEntitiesAtRevision( Customer.class, 1 ) .traverseRelation( "address", JoinType.INNER ) .add( AuditEntity.property( "country" ).eq( "România" ) ) .getResultList();