/*
* 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.components;
import java.util.Arrays;
import javax.persistence.EntityManager;
import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
import org.hibernate.envers.test.Priority;
import org.hibernate.envers.test.entities.components.DefaultValueComponent1;
import org.hibernate.envers.test.entities.components.DefaultValueComponent2;
import org.hibernate.envers.test.entities.components.DefaultValueComponentTestEntity;
import org.junit.Test;
import org.jboss.logging.Logger;
/**
* Test class for components with default values.
*
* @author Erik-Berndt Scheper
* @see <a
* href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-5288">
* Hibernate JIRA </a>
*/
public class DefaultValueComponents extends BaseEnversJPAFunctionalTestCase {
private static final Logger log = Logger.getLogger( DefaultValueComponents.class );
private Integer id0;
private Integer id1;
private Integer id2;
private Integer id3;
private Integer id4;
private Integer id5;
private Integer id6;
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] {DefaultValueComponentTestEntity.class};
}
@Test
@Priority(10)
public void initData() {
// Revision 1
EntityManager em = getEntityManager();
em.getTransaction().begin();
DefaultValueComponentTestEntity cte0 = DefaultValueComponentTestEntity
.of( null );
DefaultValueComponentTestEntity cte1 = DefaultValueComponentTestEntity
.of( DefaultValueComponent1.of( "c1-str1", null ) );
DefaultValueComponentTestEntity cte2 = DefaultValueComponentTestEntity
.of(
DefaultValueComponent1.of(
"c1-str1", DefaultValueComponent2
.of( "c2-str1", "c2-str2" )
)
);
DefaultValueComponentTestEntity cte3 = DefaultValueComponentTestEntity
.of(
DefaultValueComponent1.of(
null, DefaultValueComponent2.of(
"c2-str1", "c2-str2"
)
)
);
DefaultValueComponentTestEntity cte4 = DefaultValueComponentTestEntity
.of(
DefaultValueComponent1.of(
null, DefaultValueComponent2.of(
null, "c2-str2"
)
)
);
DefaultValueComponentTestEntity cte5 = DefaultValueComponentTestEntity
.of(
DefaultValueComponent1.of(
null, DefaultValueComponent2.of(
"c2-str1", null
)
)
);
DefaultValueComponentTestEntity cte6 = DefaultValueComponentTestEntity
.of(
DefaultValueComponent1.of(
null, DefaultValueComponent2.of(
null, null
)
)
);
em.persist( cte0 );
em.persist( cte1 );
em.persist( cte2 );
em.persist( cte3 );
em.persist( cte4 );
em.persist( cte5 );
em.persist( cte6 );
em.getTransaction().commit();
// Revision 2
em = getEntityManager();
em.getTransaction().begin();
cte0 = em.find( DefaultValueComponentTestEntity.class, cte0.getId() );
cte1 = em.find( DefaultValueComponentTestEntity.class, cte1.getId() );
cte2 = em.find( DefaultValueComponentTestEntity.class, cte2.getId() );
cte3 = em.find( DefaultValueComponentTestEntity.class, cte3.getId() );
cte4 = em.find( DefaultValueComponentTestEntity.class, cte4.getId() );
cte5 = em.find( DefaultValueComponentTestEntity.class, cte5.getId() );
cte6 = em.find( DefaultValueComponentTestEntity.class, cte6.getId() );
cte0.setComp1( DefaultValueComponent1.of( "upd-c1-str1", null ) );
cte1.setComp1(
DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "upd-c2-str1", "upd-c2-str2" )
)
);
cte2.getComp1().getComp2().setStr1( "upd-c2-str1" );
cte3.getComp1().getComp2().setStr1( "upd-c2-str1" );
cte4.getComp1().getComp2().setStr1( "upd-c2-str1" );
cte5.getComp1().getComp2().setStr1( "upd-c2-str1" );
cte6.getComp1().getComp2().setStr1( "upd-c2-str1" );
em.getTransaction().commit();
// afterwards
id0 = cte0.getId();
id1 = cte1.getId();
id2 = cte2.getId();
id3 = cte3.getId();
id4 = cte4.getId();
id5 = cte5.getId();
id6 = cte6.getId();
}
@Test
public void testRevisionsCounts() {
log.error(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id0
).toString()
);
log.error(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id1
).toString()
);
log.error(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id2
).toString()
);
log.error(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id3
).toString()
);
log.error(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id4
).toString()
);
log.error(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id5
).toString()
);
log.error(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id6
).toString()
);
assert Arrays.asList( 1, 2 ).equals(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id0
)
);
assert Arrays.asList( 1, 2 ).equals(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id1
)
);
assert Arrays.asList( 1, 2 ).equals(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id2
)
);
assert Arrays.asList( 1, 2 ).equals(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id3
)
);
assert Arrays.asList( 1, 2 ).equals(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id4
)
);
assert Arrays.asList( 1, 2 ).equals(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id5
)
);
assert Arrays.asList( 1, 2 ).equals(
getAuditReader().getRevisions(
DefaultValueComponentTestEntity.class, id6
)
);
}
@Test
public void testHistoryOfId0() {
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id0, 1
);
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id0, 2
);
log.error( "------------ id0 -------------" );
log.error( ent1.toString() );
log.error( ent2.toString() );
checkCorrectlyPersisted( id0, null, null );
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
.of( id0, DefaultValueComponent1.of( null, null ) );
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
.of( id0, DefaultValueComponent1.of( "upd-c1-str1", null ) );
assert ent1.equals( expectedVer1 );
assert ent2.equals( expectedVer2 );
}
@Test
public void testHistoryOfId1() {
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id1, 1
);
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id1, 2
);
log.error( "------------ id1 -------------" );
log.error( ent1.toString() );
log.error( ent2.toString() );
checkCorrectlyPersisted( id1, null, "upd-c2-str1" );
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
.of( id1, DefaultValueComponent1.of( "c1-str1", null ) );
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
.of(
id1, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "upd-c2-str1", "upd-c2-str2" )
)
);
assert ent2.equals( expectedVer2 );
assert ent1.equals( expectedVer1 );
}
@Test
public void testHistoryOfId2() {
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id2, 1
);
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id2, 2
);
log.error( "------------ id2 -------------" );
log.error( ent1.toString() );
log.error( ent2.toString() );
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
.of(
id2, DefaultValueComponent1.of(
"c1-str1",
DefaultValueComponent2.of( "c2-str1", "c2-str2" )
)
);
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
.of(
id2, DefaultValueComponent1.of(
"c1-str1",
DefaultValueComponent2.of( "upd-c2-str1", "c2-str2" )
)
);
assert ent1.equals( expectedVer1 );
assert ent2.equals( expectedVer2 );
}
@Test
public void testHistoryOfId3() {
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id3, 1
);
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id3, 2
);
log.error( "------------ id3 -------------" );
log.error( ent1.toString() );
log.error( ent2.toString() );
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
.of(
id3, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "c2-str1", "c2-str2" )
)
);
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
.of(
id3, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "upd-c2-str1", "c2-str2" )
)
);
assert ent1.equals( expectedVer1 );
assert ent2.equals( expectedVer2 );
}
@Test
public void testHistoryOfId4() {
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id4, 1
);
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id4, 2
);
log.error( "------------ id4 -------------" );
log.error( ent1.toString() );
log.error( ent2.toString() );
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
.of(
id4, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( null, "c2-str2" )
)
);
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
.of(
id4, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "upd-c2-str1", "c2-str2" )
)
);
assert ent1.equals( expectedVer1 );
assert ent2.equals( expectedVer2 );
}
@Test
public void testHistoryOfId5() {
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id5, 1
);
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id5, 2
);
log.error( "------------ id5 -------------" );
log.error( ent1.toString() );
log.error( ent2.toString() );
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
.of(
id5, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "c2-str1", null )
)
);
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
.of(
id5, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "upd-c2-str1", null )
)
);
assert ent1.equals( expectedVer1 );
assert ent2.equals( expectedVer2 );
}
@Test
public void testHistoryOfId6() {
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id6, 1
);
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
DefaultValueComponentTestEntity.class, id6, 2
);
log.error( "------------ id6 -------------" );
log.error( ent1.toString() );
log.error( ent2.toString() );
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
.of( id6, DefaultValueComponent1.of( null, null ) );
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
.of(
id6, DefaultValueComponent1.of(
null, DefaultValueComponent2
.of( "upd-c2-str1", null )
)
);
assert ent2.equals( expectedVer2 );
assert ent1.equals( expectedVer1 );
}
private void checkCorrectlyPersisted(
Integer expectedId,
String expectedComp2Str1Rev1, String expectedComp2Str1Rev2) {
// Verify that the entity was correctly persisted
EntityManager em = getEntityManager();
Long entCount = (Long) em.createQuery(
"select count(s) from DefaultValueComponentTestEntity s where s.id = "
+ expectedId.toString()
).getSingleResult();
Number auditCount = (Number) em.createNativeQuery(
"select count(id) from DefaultValueComponent_AUD s where s.id = "
+ expectedId.toString()
).getSingleResult();
String comp2Str1Rev1 = (String) em
.createNativeQuery(
"select COMP2_STR1 from DefaultValueComponent_AUD s where REV=1 and s.id = "
+ expectedId.toString()
).getSingleResult();
String comp2Str1Rev2 = (String) em
.createNativeQuery(
"select COMP2_STR1 from DefaultValueComponent_AUD s where REV=2 and s.id = "
+ expectedId.toString()
).getSingleResult();
assert Long.valueOf( 1L ).equals( entCount );
assert Integer.valueOf( 2 ).equals( auditCount.intValue() );
if ( expectedComp2Str1Rev1 == null ) {
assert comp2Str1Rev1 == null;
}
else {
assert expectedComp2Str1Rev1.equals( comp2Str1Rev1 );
}
if ( expectedComp2Str1Rev2 == null ) {
assert comp2Str1Rev2 == null;
}
else {
assert expectedComp2Str1Rev2.equals( comp2Str1Rev2 );
}
}
}