@Override protected Object queryForReferencedEntity( AuditReaderImplementor versionsReader, EntityInfo referencedEntity, Serializable primaryKey, Number revision) { return versionsReader.createQuery().forEntitiesAtRevision( referencedEntity.getEntityClass(), referencedEntity.getEntityName(), revision ) .add( AuditEntity.relatedId( owningReferencePropertyName ).eq( primaryKey ) ) .getSingleResult(); } }
@Test public void testEntitiesReferencedToId4() { Set rev1_related = new HashSet( getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) .getResultList() ); Set rev2_related = new HashSet( getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) .getResultList() ); Set rev3_related = new HashSet( getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) .getResultList() ); assert rev1_related.equals( TestTools.makeSet() ); assert rev2_related.equals( TestTools.makeSet( new SetRefIngEmbIdEntity( id2, "y", null ) ) ); assert rev3_related.equals( TestTools.makeSet() ); }
@Test public void shouldFailWhenQueryOnManyToOne() { //when PlainEntity plainEntity = (PlainEntity) getAuditReader().createQuery() .forEntitiesAtRevision( PlainEntity.class, 1 ) .add( AuditEntity.relatedId( "component_manyToOneEntity" ).eq( getManyToOneEntity().getId() ) ) .getResultList().get( 0 ); //then Assert.assertEquals( getManyToOneEntity(), plainEntity.getComponent().getManyToOneEntity() ); }
@Test public void testEntitiesReferencedToId4() { Set rev1_related = new HashSet( getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) .getResultList() ); Set rev2_related = new HashSet( getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) .getResultList() ); Set rev3_related = new HashSet( getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) .getResultList() ); assertEquals( rev1_related, TestTools.makeSet() ); assertEquals( rev2_related, TestTools.makeSet( new SetRefIngMulIdEntity( id2, "y", null ) ) ); assertEquals( rev3_related, TestTools.makeSet() ); }
@Test public void testEntitiesReferencedByIng2ToId3() { List rev1_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id2 ) ) .getResultList(); List rev2_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id2 ) ) .getResultList(); Object rev3_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id2 ) ) .getSingleResult(); assert rev1_related.size() == 0; assert rev2_related.size() == 0; assert rev3_related.equals( new SetRefIngEmbIdEntity( id2, "y", null ) ); } }
@Test public void testEntitiesReferencedByIng1ToId3() { List rev1_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id1 ) ) .getResultList(); Object rev2_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); Object rev3_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); assert rev1_related.size() == 0; assert rev2_related.equals( new SetRefIngEmbIdEntity( id1, "x", null ) ); assert rev3_related.equals( new SetRefIngEmbIdEntity( id1, "x", null ) ); }
@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 public void testEntitiesReferencedByIng2ToId3() { List rev1_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id2 ) ) .getResultList(); List rev2_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id2 ) ) .getResultList(); Object rev3_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id2 ) ) .getSingleResult(); assertEquals( 0, rev1_related.size() ); assertEquals( 0, rev2_related.size() ); assertEquals( new SetRefIngMulIdEntity( id2, "y", null ), rev3_related ); } }
getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .getResultList() ); getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .getResultList() ); getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .getResultList() );
@Test public void testEntitiesReferencedByIng1ToId3() { List rev1_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id1 ) ) .getResultList(); Object rev2_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); Object rev3_related = getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .add( AuditEntity.id().eq( id1 ) ) .getSingleResult(); assertEquals( 0, rev1_related.size() ); assertEquals( rev2_related, new SetRefIngMulIdEntity( id1, "x", null ) ); assertEquals( rev3_related, new SetRefIngMulIdEntity( id1, "x", null ) ); }
@Test public void shouldFailWhenQueryOnOneToOne() { //when try { getAuditReader().createQuery() .forEntitiesAtRevision( PlainEntity.class, 1 ) .add( AuditEntity.relatedId( "component_oneToOneEntity" ).eq( getOneToOneEntity().getId() ) ) .getResultList(); //then fail( "This should have generated an IllegalArgumentException" ); } catch ( Exception e ) { assertTyping( IllegalArgumentException.class, e ); } } }
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 1 ) ) .getResultList(); .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 2 ) ) .getResultList(); .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 3 ) ) .getResultList(); .add( AuditEntity.relatedId( "document" ).eq( 1 ) ) .getResultList(); assertEquals( 2, results.size() ); .add( AuditEntity.relatedId( "document" ).eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() );
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 1 ) ) .getResultList(); .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 2 ) ) .getResultList(); .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 3 ) ) .getResultList(); .add( AuditEntity.relatedId( "document" ).eq( 1 ) ) .getResultList(); assertEquals( 2, results.size() ); .add( AuditEntity.relatedId( "document" ).eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() );
.add( AuditEntity.relatedId( "dynamicConfiguration_" + PROP_MANY_TO_ONE ) .eq( manyToOneEntity.getId() )
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 1 ) ) .getResultList(); .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 2 ) ) .getResultList(); .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 3 ) ) .getResultList(); .add( AuditEntity.relatedId( "id.document" ).eq( 1 ) ) .getResultList(); assertEquals( 2, results.size() ); .add( AuditEntity.relatedId( "id.document" ).eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() );
getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .getResultList() ); getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .getResultList() ); getAuditReader().createQuery() .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) .getResultList() );
AuditEntity.or( AuditEntity.property( "a", "city" ).eq( "Cluj-Napoca" ), AuditEntity.relatedId( "country" ).eq( null )
.createQuery() .forRevisionsOfEntity( Customer.class, true, true ) .add( AuditEntity.relatedId( "address" ).eq( 1L ) ) .getResultList(); .forRevisionsOfEntity( Customer.class, true, true ) .addOrder( AuditEntity.property( "lastName" ).desc() ) .add( AuditEntity.relatedId( "address" ).eq( 1L ) ) .setFirstResult( 1 ) .setMaxResults( 2 )
/** * Adds a filter on the "language" property to the query * * @param query * the original query * @param lang * the language value to filter on */ public void addFilterOnLanguage(AuditQuery query, String languageId) { query.add(AuditEntity.relatedId("language").eq(languageId)); }
/** * @param reader * @param clazz * @param identifier * @param currentRevision * @return */ public AuditQuery getPreviousPreferredTermQuery(int currentRevision, String conceptId) { return readerService.getAuditReader().createQuery() .forRevisionsOfEntity(ThesaurusTerm.class, false, true) .add(AuditEntity.revisionNumber().lt(currentRevision)) .add(AuditEntity.property("prefered").eq(true)) .add(AuditEntity.relatedId("concept").eq(conceptId)); }