/** * Create restrictions, projections and specify order for a property of an audited entity. * * @param propertyName Name of the property. */ public static AuditProperty<Object> property(String propertyName) { return property( null, propertyName ); }
private void addHasChangedProperties( AuditQuery query, String[] propertyNames) { for ( String propertyName : propertyNames ) { query.add( AuditEntity.property( propertyName ).hasChanged() ); } }
private void addHasNotChangedProperties( AuditQuery query, String[] propertyNames) { for ( String propertyName : propertyNames ) { query.add( AuditEntity.property( propertyName ).hasNotChanged() ); } }
@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 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 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() ); }
@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 testReferencePropertyIsNotNullQuery() { CollectionRefIngEntity ver = (CollectionRefIngEntity) getAuditReader().createQuery() .forEntitiesAtRevision( CollectionRefIngEntity.class, 3 ) .add( AuditEntity.property( "reference" ).isNotNull() ) .getSingleResult(); assert ver.getId().equals( idReferenceToParentNotNull ); } }
@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 @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 testModifiedFlagChangesForProjectType() { final List results = getAuditReader().createQuery() .forRevisionsOfEntity( Project.class, false, true ) .add( AuditEntity.property( "type" ).hasChanged() ) .addProjection( AuditEntity.revisionNumber() ) .addOrder( AuditEntity.revisionNumber().asc() ) .getResultList(); assertEquals( Arrays.asList( 1 ), results ); }
@Test public void testSimplePropertyIsNotNullQuery() { StrIntTestEntity ver = (StrIntTestEntity) getAuditReader().createQuery() .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) .add( AuditEntity.property( "str1" ).isNotNull() ) .getSingleResult(); assert ver.equals( new StrIntTestEntity( "data", 2, idSimplePropertyNotNull ) ); }
@Test public void testReferenceMulticolumnPropertyIsNullQuery() { SetRefIngEmbIdEntity ver = (SetRefIngEmbIdEntity) getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) .add( AuditEntity.property( "reference" ).isNull() ) .getSingleResult(); assert ver.getId().equals( idMulticolumnReferenceToParentNull ); }
@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 public void testModifiedFlagChangesForProjectName() { final List results = getAuditReader().createQuery() .forRevisionsOfEntity( Project.class, false, true ) .add( AuditEntity.property( "name" ).hasChanged() ) .addProjection( AuditEntity.revisionNumber() ) .addOrder( AuditEntity.revisionNumber().asc() ) .getResultList(); assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), results ); }
@Test public void testRevisionsGtWithPropertyQuery() { List result = getAuditReader().createQuery() .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) .addProjection( AuditEntity.revisionNumber() ) .add( AuditEntity.revisionNumber().gt( 1 ) ) .add( AuditEntity.property( "number" ).lt( 10 ) ) .getResultList(); Assert.assertEquals( TestTools.makeSet( 3, 4 ), new HashSet<>( result ) ); }
private List getEntitiesModifiedAtRevisionUsingAssociationQueryResults(Number revision) { // Without fix HHH-11981, throw org.hibernate.QueryException - Parameter not bound : revision return getAuditReader().createQuery() .forEntitiesModifiedAtRevision( Template.class, revision ) .traverseRelation( "templateType", JoinType.INNER ) .addProjection( AuditEntity.selectEntity( false ) ) .up() .add( AuditEntity.property( "templateType" ).hasChanged() ) .getResultList(); } }
@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 testComparisonOfTwoPropertiesFromDifferentEntities() { AuditReader auditReader = getAuditReader(); // the car where the owner age is equal to the owner address number. Car result = (Car) auditReader.createQuery() .forEntitiesAtRevision( Car.class, 1 ) .traverseRelation( "owner", JoinType.INNER, "p" ) .traverseRelation( "address", JoinType.INNER, "a" ) .up().up().add(AuditEntity.property( "p", "age" ) .eqProperty( "a", "number" ) ).getSingleResult(); assertEquals( "Unexpected car returned", toyota.getId(), result.getId() ); }