package org.hibernate.envers.test.integration.onetomany.embeddedid; import javax.persistence.EntityManager; import org.hibernate.envers.test.Priority; import org.hibernate.testing.TestForIssue; import org.junit.Assert; import org.junit.Test; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import java.util.Arrays; /** * @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); } }