/*
* 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.customtype;
import java.util.Arrays;
import java.util.Map;
import javax.persistence.EntityManager;
import org.hibernate.dialect.Oracle8iDialect;
import org.hibernate.envers.configuration.EnversSettings;
import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
import org.hibernate.envers.test.Priority;
import org.hibernate.testing.RequiresDialect;
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-7870")
@RequiresDialect(Oracle8iDialect.class)
public class ObjectUserTypeTest extends BaseEnversJPAFunctionalTestCase {
private int id;
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {ObjectUserTypeEntity.class};
}
@Override
protected void addConfigOptions(Map options) {
super.addConfigOptions( options );
options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" );
}
@Test
@Priority(10)
public void initData() {
EntityManager em = getEntityManager();
// Revision 1 - add
em.getTransaction().begin();
ObjectUserTypeEntity entity = new ObjectUserTypeEntity( "builtInType1", "stringUserType1" );
em.persist( entity );
em.getTransaction().commit();
id = entity.getId();
// Revision 2 - modify
em.getTransaction().begin();
entity = em.find( ObjectUserTypeEntity.class, entity.getId() );
entity.setUserType( 2 );
entity = em.merge( entity );
em.getTransaction().commit();
// Revision 3 - remove
em.getTransaction().begin();
entity = em.find( ObjectUserTypeEntity.class, entity.getId() );
em.remove( entity );
em.getTransaction().commit();
em.close();
}
@Test
public void testRevisionCount() {
Assert.assertEquals(
Arrays.asList( 1, 2, 3 ),
getAuditReader().getRevisions( ObjectUserTypeEntity.class, id )
);
}
@Test
public void testHistory() {
ObjectUserTypeEntity ver1 = new ObjectUserTypeEntity( id, "builtInType1", "stringUserType1" );
ObjectUserTypeEntity ver2 = new ObjectUserTypeEntity( id, "builtInType1", 2 );
Assert.assertEquals( ver1, getAuditReader().find( ObjectUserTypeEntity.class, id, 1 ) );
Assert.assertEquals( ver2, getAuditReader().find( ObjectUserTypeEntity.class, id, 2 ) );
Assert.assertEquals(
ver2,
getAuditReader().createQuery()
.forRevisionsOfEntity( ObjectUserTypeEntity.class, true, true )
.getResultList()
.get( 2 )
); // Checking delete state.
}
}