/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.envers.test.integration.query; import javax.persistence.EntityManager; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.entities.StrIntTestEntity; import org.hibernate.envers.test.entities.ids.EmbId; import org.hibernate.envers.test.entities.onetomany.CollectionRefEdEntity; import org.hibernate.envers.test.entities.onetomany.CollectionRefIngEntity; import org.hibernate.envers.test.entities.onetomany.ids.SetRefEdEmbIdEntity; import org.hibernate.envers.test.entities.onetomany.ids.SetRefIngEmbIdEntity; import org.junit.Test; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ public class NullPropertyQuery extends BaseEnversJPAFunctionalTestCase { private Integer idSimplePropertyNull = null; private Integer idSimplePropertyNotNull = null; private EmbId idMulticolumnReferenceToParentNull = new EmbId( 0, 1 ); private Integer idReferenceToParentNotNull = 1; private Integer idParent = 1; @Override protected Class<?>[] getAnnotatedClasses() { return new Class[] { StrIntTestEntity.class, SetRefEdEmbIdEntity.class, SetRefIngEmbIdEntity.class, CollectionRefEdEntity.class, CollectionRefIngEntity.class }; } @Test @Priority(10) public void initData() { // Revision 1 EntityManager em = getEntityManager(); em.getTransaction().begin(); StrIntTestEntity nullSite = new StrIntTestEntity( null, 1 ); StrIntTestEntity notNullSite = new StrIntTestEntity( "data", 2 ); em.persist( nullSite ); em.persist( notNullSite ); idSimplePropertyNull = nullSite.getId(); idSimplePropertyNotNull = notNullSite.getId(); em.getTransaction().commit(); // Revision 2 em.getTransaction().begin(); SetRefIngEmbIdEntity nullParentSrieie = new SetRefIngEmbIdEntity( idMulticolumnReferenceToParentNull, "data", null ); em.persist( nullParentSrieie ); em.getTransaction().commit(); // Revision 3 em.getTransaction().begin(); CollectionRefEdEntity parent = new CollectionRefEdEntity( idParent, "data" ); CollectionRefIngEntity notNullParentCrie = new CollectionRefIngEntity( idReferenceToParentNotNull, "data", parent ); em.persist( parent ); em.persist( notNullParentCrie ); em.getTransaction().commit(); } @Test public void testSimplePropertyIsNullQuery() { StrIntTestEntity ver = (StrIntTestEntity) getAuditReader().createQuery() .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) .add( AuditEntity.property( "str1" ).isNull() ) .getSingleResult(); assert ver.equals( new StrIntTestEntity( null, 1, idSimplePropertyNull ) ); } @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 testReferencePropertyIsNotNullQuery() { CollectionRefIngEntity ver = (CollectionRefIngEntity) getAuditReader().createQuery() .forEntitiesAtRevision( CollectionRefIngEntity.class, 3 ) .add( AuditEntity.property( "reference" ).isNotNull() ) .getSingleResult(); assert ver.getId().equals( idReferenceToParentNotNull ); } }