HHH-15522 Add hibernate isInitialized tests on envers collections

This commit is contained in:
Fabricio Gregorio 2022-09-17 13:35:43 -03:00 committed by Yoann Rodière
parent 4f9ff5cfd1
commit c3f1762f3b
2 changed files with 181 additions and 0 deletions

View File

@ -0,0 +1,93 @@
/*
* 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.orm.test.envers.integration.lazy;
import java.util.List;
import jakarta.persistence.EntityManager;
import org.hibernate.dialect.OracleDialect;
import org.hibernate.envers.query.AuditEntity;
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
import org.hibernate.orm.test.envers.Priority;
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity;
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1;
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2;
import org.hibernate.testing.SkipForDialect;
import org.hibernate.testing.TestForIssue;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import org.hibernate.Hibernate;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
import org.hibernate.testing.bytecode.enhancement.EnhancementOptions;
/**
* @author Fabricio Gregorio
*/
@TestForIssue(jiraKey = "HHH-15522")
@RunWith(BytecodeEnhancerRunner.class)
@EnhancementOptions(lazyLoading = true)
@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation")
public class IsCollectionInitializedBytecodeEnhancementTest extends BaseEnversJPAFunctionalTestCase {
private Long mce1Id = null;
private Long mcre1Id = null;
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[]{
MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class
};
}
@Test
@Priority(10)
public void initData() {
EntityManager em = getEntityManager();
// Revision 1 - addition.
em.getTransaction().begin();
MultipleCollectionEntity mce1 = new MultipleCollectionEntity();
mce1.setText( "MultipleCollectionEntity-1-1" );
em.persist( mce1 ); // Persisting entity with empty collections.
em.getTransaction().commit();
mce1Id = mce1.getId();
// Revision 2 - update.
em.getTransaction().begin();
mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() );
MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1();
mcre1.setText( "MultipleCollectionRefEntity1-1-1" );
mcre1.setMultipleCollectionEntity( mce1 );
mce1.addRefEntity1( mcre1 );
em.persist( mcre1 );
mce1 = em.merge( mce1 );
em.getTransaction().commit();
mcre1Id = mcre1.getId();
em.close();
}
@Test
public void testIsInitialized() {
EntityManager em = getEntityManager();
AuditReader reader = AuditReaderFactory.get( em );
List<MultipleCollectionEntity> res = reader.createQuery().forEntitiesAtRevision( MultipleCollectionEntity.class, 1 )
.add( AuditEntity.id().eq( mce1Id ) )
.getResultList();
MultipleCollectionEntity ret = res.get( 0 );
assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), false );
}
}

View File

@ -0,0 +1,88 @@
/*
* 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.orm.test.envers.integration.lazy;
import java.util.List;
import jakarta.persistence.EntityManager;
import org.hibernate.dialect.OracleDialect;
import org.hibernate.envers.query.AuditEntity;
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
import org.hibernate.orm.test.envers.Priority;
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity;
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1;
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2;
import org.hibernate.testing.SkipForDialect;
import org.hibernate.testing.TestForIssue;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.hibernate.Hibernate;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
/**
* @author Fabricio Gregorio
*/
@TestForIssue(jiraKey = "HHH-15522")
@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation")
public class IsCollectionInitializedTest extends BaseEnversJPAFunctionalTestCase {
private Long mce1Id = null;
private Long mcre1Id = null;
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[]{
MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class
};
}
@Test
@Priority(10)
public void initData() {
EntityManager em = getEntityManager();
// Revision 1 - addition.
em.getTransaction().begin();
MultipleCollectionEntity mce1 = new MultipleCollectionEntity();
mce1.setText( "MultipleCollectionEntity-1-1" );
em.persist( mce1 ); // Persisting entity with empty collections.
em.getTransaction().commit();
mce1Id = mce1.getId();
// Revision 2 - update.
em.getTransaction().begin();
mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() );
MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1();
mcre1.setText( "MultipleCollectionRefEntity1-1-1" );
mcre1.setMultipleCollectionEntity( mce1 );
mce1.addRefEntity1( mcre1 );
em.persist( mcre1 );
mce1 = em.merge( mce1 );
em.getTransaction().commit();
mcre1Id = mcre1.getId();
em.close();
}
@Test
public void testIsInitialized() {
EntityManager em = getEntityManager();
AuditReader reader = AuditReaderFactory.get( em );
List<MultipleCollectionEntity> res = reader.createQuery().forEntitiesAtRevision( MultipleCollectionEntity.class, 1 )
.add( AuditEntity.id().eq( mce1Id ) )
.getResultList();
MultipleCollectionEntity ret = res.get( 0 );
assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), false );
}
}