/* * 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.modifiedflags; import java.io.File; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.hibernate.MappingException; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.integration.entityNames.manyToManyAudited.Car; import org.hibernate.envers.test.integration.entityNames.manyToManyAudited.Person; import org.junit.Test; import static junit.framework.Assert.assertEquals; import static org.hibernate.envers.test.tools.TestTools.extractRevisionNumbers; import static org.hibernate.envers.test.tools.TestTools.makeList; /** * @author Hernán Chanfreau * @author Michal Skowronek (mskowr at o2 dot pl) */ public class HasChangedAuditedManyToManyTest extends AbstractModifiedFlagsOneSessionTest { private long id_car1; private long id_pers1; private long id_pers2; protected void initMappings() throws MappingException, URISyntaxException { URL url = Thread.currentThread().getContextClassLoader().getResource( "mappings/entityNames/manyToManyAudited/mappings.hbm.xml" ); config.addFile( new File( url.toURI() ) ); } @Test @Priority(10) public void initData() { initializeSession(); Person pers1 = new Person( "Hernan", 28 ); Person pers2 = new Person( "Leandro", 29 ); Person pers3 = new Person( "Barba", 32 ); Person pers4 = new Person( "Camomo", 15 ); //REV 1 getSession().getTransaction().begin(); List<Person> owners = new ArrayList<Person>(); owners.add( pers1 ); owners.add( pers2 ); owners.add( pers3 ); Car car1 = new Car( 5, owners ); getSession().persist( car1 ); getSession().getTransaction().commit(); id_pers1 = pers1.getId(); id_car1 = car1.getId(); id_pers2 = pers2.getId(); owners = new ArrayList<Person>(); owners.add( pers2 ); owners.add( pers3 ); owners.add( pers4 ); Car car2 = new Car( 27, owners ); //REV 2 getSession().getTransaction().begin(); Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); person1.setName( "Hernan David" ); person1.setAge( 40 ); getSession().persist( car1 ); getSession().persist( car2 ); getSession().getTransaction().commit(); } @Test public void testHasChangedPerson1() throws Exception { List list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) .add( AuditEntity.id().eq( id_pers1 ) ) .add( AuditEntity.property( "cars" ).hasChanged() ) .getResultList(); assertEquals( 1, list.size() ); assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) .add( AuditEntity.id().eq( id_pers1 ) ) .add( AuditEntity.property( "cars" ).hasNotChanged() ) .getResultList(); assertEquals( 1, list.size() ); assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); } @Test public void testHasChangedPerson2() throws Exception { List list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) .add( AuditEntity.id().eq( id_pers2 ) ) .add( AuditEntity.property( "cars" ).hasChanged() ) .getResultList(); assertEquals( 2, list.size() ); assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) .add( AuditEntity.id().eq( id_pers2 ) ) .add( AuditEntity.property( "cars" ).hasNotChanged() ) .getResultList(); assertEquals( 0, list.size() ); } @Test public void testHasChangedCar1() throws Exception { List list = getAuditReader().createQuery().forRevisionsOfEntity( Car.class, false, false ) .add( AuditEntity.id().eq( id_car1 ) ) .add( AuditEntity.property( "owners" ).hasChanged() ) .getResultList(); assertEquals( 1, list.size() ); assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); list = getAuditReader().createQuery().forRevisionsOfEntity( Car.class, false, false ) .add( AuditEntity.id().eq( id_car1 ) ) .add( AuditEntity.property( "owners" ).hasNotChanged() ) .getResultList(); assertEquals( 0, list.size() ); } }