/* * 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.naming; import java.util.Arrays; import java.util.Iterator; import java.util.List; import javax.persistence.EntityManager; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.entities.components.Component1; import org.hibernate.mapping.Column; import org.hibernate.mapping.PersistentClass; import org.junit.Test; /** * Test class for {@link VersionsJoinTableRangeComponentTestEntity}, to test * various {@link org.hibernate.envers.AuditOverride} annotations. * * @author Erik-Berndt Scheper */ public class VersionsJoinTableRangeComponentNamingTest extends BaseEnversJPAFunctionalTestCase { private Integer vjrcte_id; private Integer vjtrte_id; private Integer vjtrtae_id1; @Override protected Class<?>[] getAnnotatedClasses() { return new Class[] { VersionsJoinTableRangeComponentTestEntity.class, VersionsJoinTableRangeTestEntitySuperClass.class, VersionsJoinTableRangeTestEntity.class, VersionsJoinTableRangeTestAlternateEntity.class }; } @Test @Priority(10) public void initData() { // Revision 1 EntityManager em = getEntityManager(); em.getTransaction().begin(); // create an instance of the test entity VersionsJoinTableRangeComponentTestEntity vjrcte = new VersionsJoinTableRangeComponentTestEntity(); em.persist( vjrcte ); em.getTransaction().commit(); // Revision 2 em.getTransaction().begin(); vjrcte = em.find( VersionsJoinTableRangeComponentTestEntity.class, vjrcte.getId() ); // create a component containing a list of // VersionsJoinTableRangeTestEntity-instances VersionsJoinTableRangeTestEntity vjtrte = new VersionsJoinTableRangeTestEntity(); vjtrte.setGenericValue( "generic1" ); vjtrte.setValue( "value1" ); // and add it to the test entity vjrcte.getComponent1().getRange().add( vjtrte ); // create a second component containing a list of // VersionsJoinTableRangeTestAlternateEntity-instances VersionsJoinTableRangeTestAlternateEntity vjtrtae1 = new VersionsJoinTableRangeTestAlternateEntity(); vjtrtae1.setGenericValue( "generic2" ); vjtrtae1.setAlternateValue( "alternateValue2" ); // and add it to the test entity vjrcte.getComponent2().getRange().add( vjtrtae1 ); // create a third component, and add it to the test entity Component1 simpleComponent = new Component1( "string1", "string2" ); vjrcte.setComponent3( simpleComponent ); em.persist( vjtrte ); em.persist( vjtrtae1 ); em.persist( vjrcte ); em.getTransaction().commit(); // Revision 2 em.getTransaction().begin(); vjrcte = em.find( VersionsJoinTableRangeComponentTestEntity.class, vjrcte.getId() ); vjtrte = em .find( VersionsJoinTableRangeTestEntity.class, vjtrte.getId() ); vjtrtae1 = em.find( VersionsJoinTableRangeTestAlternateEntity.class, vjtrtae1.getId() ); assert vjrcte != null; assert vjtrte != null; assert vjtrtae1 != null; List<VersionsJoinTableRangeTestEntity> ent1List = vjrcte .getComponent1().getRange(); assert ent1List.size() == 1; assert vjtrte.equals( ent1List.get( 0 ) ); List<VersionsJoinTableRangeTestAlternateEntity> ent2List = vjrcte .getComponent2().getRange(); assert ent2List.size() == 1; assert vjtrtae1.equals( ent2List.get( 0 ) ); em.getTransaction().commit(); vjrcte_id = vjrcte.getId(); vjtrte_id = vjtrte.getId(); vjtrtae_id1 = vjtrtae1.getId(); } @Test public void testRevisionsCounts() { assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id ) ); assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( VersionsJoinTableRangeTestEntity.class, vjtrte_id ) ); assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( VersionsJoinTableRangeTestAlternateEntity.class, vjtrtae_id1 ) ); } @Test public void testHistoryOfUniId1() { VersionsJoinTableRangeTestEntity vjtrte = getEntityManager().find( VersionsJoinTableRangeTestEntity.class, vjtrte_id ); VersionsJoinTableRangeTestAlternateEntity vjtrtae = getEntityManager() .find( VersionsJoinTableRangeTestAlternateEntity.class, vjtrtae_id1 ); VersionsJoinTableRangeComponentTestEntity rev1 = getAuditReader().find( VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id, 1 ); VersionsJoinTableRangeComponentTestEntity rev2 = getAuditReader().find( VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id, 2 ); assert rev1.getComponent1().getRange().size() == 0; assert rev1.getComponent2().getRange().size() == 0; assert rev2.getComponent1().getRange().size() == 1; assert rev2.getComponent1().getRange().get( 0 ).equals( vjtrte ); assert rev2.getComponent2().getRange().size() == 1; assert rev2.getComponent2().getRange().get( 0 ).equals( vjtrtae ); } /* The Audit join tables we expect */ private final static String COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_1_AUD"; private final static String COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_2_AUD"; /* The Audit join tables that should NOT be there */ private final static String UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestEntity_AUD"; private final static String UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestAlternateEntity_AUD"; @Test public void testExpectedTableNameComponent1() { PersistentClass auditClass = metadata().getEntityBinding( COMPONENT_1_AUDIT_JOIN_TABLE_NAME ); assert auditClass != null; assert COMPONENT_1_AUDIT_JOIN_TABLE_NAME.equals( auditClass.getTable() .getName() ); } @Test public void testExpectedTableNameComponent2() { PersistentClass auditClass = metadata().getEntityBinding( COMPONENT_2_AUDIT_JOIN_TABLE_NAME ); assert auditClass != null; assert COMPONENT_2_AUDIT_JOIN_TABLE_NAME.equals( auditClass.getTable() .getName() ); } @Test public void testWrongTableNameComponent1() { PersistentClass auditClass = metadata().getEntityBinding( UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME ); assert auditClass == null; } @Test public void testWrongTableNameComponent2() { PersistentClass auditClass = metadata().getEntityBinding( UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME ); assert auditClass == null; } @Test public void testJoinColumnNamesComponent1() { PersistentClass auditClass = metadata().getEntityBinding( COMPONENT_1_AUDIT_JOIN_TABLE_NAME ); assert auditClass != null; @SuppressWarnings({"unchecked"}) Iterator<Column> columns = auditClass.getTable().getColumnIterator(); boolean id1Found = false; boolean id2Found = false; while ( columns.hasNext() ) { Column column = columns.next(); if ( "VJTRCTE1_ID".equals( column.getName() ) ) { id1Found = true; } if ( "VJTRTE_ID".equals( column.getName() ) ) { id2Found = true; } } assert id1Found && id2Found; } @Test public void testJoinColumnNamesComponent2() { PersistentClass auditClass = metadata().getEntityBinding( COMPONENT_2_AUDIT_JOIN_TABLE_NAME ); assert auditClass != null; @SuppressWarnings({"unchecked"}) Iterator<Column> columns = auditClass.getTable().getColumnIterator(); boolean id1Found = false; boolean id2Found = false; while ( columns.hasNext() ) { Column column = columns.next(); if ( "VJTRCTE2_ID".equals( column.getName() ) ) { id1Found = true; } if ( "VJTRTAE_ID".equals( column.getName() ) ) { id2Found = true; } } assert id1Found && id2Found; } /** * Verify that * {@link VersionsJoinTableRangeComponentTestEntity#getComponent3()} is * partially audited. */ @Test public void testOverrideNotAudited() { PersistentClass auditClass = metadata().getEntityBinding( VersionsJoinTableRangeComponentTestEntity.class.getName() + "_AUD" ); assert auditClass != null; @SuppressWarnings({"unchecked"}) Iterator<Column> columns = auditClass.getTable().getColumnIterator(); boolean auditColumn1Found = false; boolean auditColumn2Found = false; while ( columns.hasNext() ) { Column column = columns.next(); if ( "STR1".equals( column.getName() ) ) { auditColumn1Found = true; } if ( "STR2".equals( column.getName() ) ) { auditColumn2Found = true; } } assert auditColumn1Found && !auditColumn2Found; } }