/* * 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.onetomany.embeddedid; import java.util.Arrays; import javax.persistence.EntityManager; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.hibernate.testing.TestForIssue; import org.junit.Assert; import org.junit.Test; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @TestForIssue(jiraKey = "HHH-7157") public class MapsIdTest extends BaseEnversJPAFunctionalTestCase { private PersonTuple tuple1Ver1 = null; private PersonTuple tuple2Ver1 = null; private PersonTuple tuple2Ver2 = null; private Person personCVer1 = null; private Person personCVer2 = null; @Override protected Class<?>[] getAnnotatedClasses() { return new Class[] {Person.class, PersonTuple.class, Constant.class}; } @Test @Priority(10) public void initData() { EntityManager em = getEntityManager(); // Revision 1 em.getTransaction().begin(); Person personA = new Person( "Peter" ); Person personB = new Person( "Mary" ); em.persist( personA ); em.persist( personB ); Constant cons = new Constant( "USD", "US Dollar" ); em.persist( cons ); PersonTuple tuple1 = new PersonTuple( true, personA, personB, cons ); em.persist( tuple1 ); em.getTransaction().commit(); tuple1Ver1 = new PersonTuple( tuple1.isHelloWorld(), tuple1.getPersonA(), tuple1.getPersonB(), tuple1.getConstant() ); // Revision 2 em.getTransaction().begin(); cons = em.find( Constant.class, cons.getId() ); Person personC1 = new Person( "Lukasz" ); em.persist( personC1 ); PersonTuple tuple2 = new PersonTuple( true, personA, personC1, cons ); em.persist( tuple2 ); em.getTransaction().commit(); tuple2Ver1 = new PersonTuple( tuple2.isHelloWorld(), tuple2.getPersonA(), tuple2.getPersonB(), tuple2.getConstant() ); personCVer1 = new Person( personC1.getId(), personC1.getName() ); personCVer1.getPersonBTuples().add( tuple2Ver1 ); // Revision 3 em.getTransaction().begin(); tuple2 = em.find( PersonTuple.class, tuple2.getPersonTupleId() ); tuple2.setHelloWorld( false ); em.merge( tuple2 ); em.getTransaction().commit(); tuple2Ver2 = new PersonTuple( tuple2.isHelloWorld(), tuple2.getPersonA(), tuple2.getPersonB(), tuple2.getConstant() ); // Revision 4 em.getTransaction().begin(); Person personC2 = em.find( Person.class, personC1.getId() ); personC2.setName( "Robert" ); em.merge( personC2 ); em.getTransaction().commit(); personCVer2 = new Person( personC2.getId(), personC2.getName() ); personCVer2.getPersonBTuples().add( tuple2Ver1 ); em.close(); } @Test public void testRevisionsCounts() { Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( PersonTuple.class, tuple1Ver1.getPersonTupleId() ) ); Assert.assertEquals( Arrays.asList( 2, 3 ), getAuditReader().getRevisions( PersonTuple.class, tuple2Ver1.getPersonTupleId() ) ); Assert.assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Person.class, personCVer1.getId() ) ); } @Test public void testHistoryOfTuple1() { PersonTuple tuple = getAuditReader().find( PersonTuple.class, tuple1Ver1.getPersonTupleId(), 1 ); Assert.assertEquals( tuple1Ver1, tuple ); Assert.assertEquals( tuple1Ver1.isHelloWorld(), tuple.isHelloWorld() ); Assert.assertEquals( tuple1Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); Assert.assertEquals( tuple1Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); } @Test public void testHistoryOfTuple2() { PersonTuple tuple = getAuditReader().find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 2 ); Assert.assertEquals( tuple2Ver1, tuple ); Assert.assertEquals( tuple2Ver1.isHelloWorld(), tuple.isHelloWorld() ); Assert.assertEquals( tuple2Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); Assert.assertEquals( tuple2Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); tuple = getAuditReader().find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 3 ); Assert.assertEquals( tuple2Ver2, tuple ); Assert.assertEquals( tuple2Ver2.isHelloWorld(), tuple.isHelloWorld() ); Assert.assertEquals( tuple2Ver2.getPersonA().getId(), tuple.getPersonA().getId() ); Assert.assertEquals( tuple2Ver2.getPersonB().getId(), tuple.getPersonB().getId() ); } @Test public void testHistoryOfPersonC() { Person person = getAuditReader().find( Person.class, personCVer1.getId(), 2 ); Assert.assertEquals( personCVer1, person ); Assert.assertEquals( personCVer1.getPersonATuples(), person.getPersonATuples() ); Assert.assertEquals( personCVer1.getPersonBTuples(), person.getPersonBTuples() ); person = getAuditReader().find( Person.class, personCVer2.getId(), 4 ); Assert.assertEquals( personCVer2, person ); } }