/*
* 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.modifiedflags;
import java.util.Map;
import javax.persistence.EntityManager;
import org.hibernate.envers.configuration.EnversSettings;
import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
import org.hibernate.envers.test.Priority;
import org.hibernate.envers.test.integration.modifiedflags.entities.Professor;
import org.hibernate.envers.test.integration.modifiedflags.entities.Student;
import org.hibernate.testing.TestForIssue;
import org.junit.Test;
/**
* @author Chris Cranford
*/
@TestForIssue(jiraKey = "HHH-7510")
public class HasChangedAuditedManyToManyRemovalTest extends BaseEnversJPAFunctionalTestCase {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
Student.class,
Professor.class
};
}
@Override
protected void addConfigOptions(Map options) {
super.addConfigOptions( options );
options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" );
options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" );
}
@Test
@Priority(10)
public void initData() {
EntityManager entityManager = getEntityManager();
try {
// Revision 1 - insertion
Professor professor = new Professor();
Student student = new Student();
professor.getStudents().add( student );
student.getProfessors().add( professor );
entityManager.getTransaction().begin();
entityManager.persist( professor );
entityManager.persist( student );
entityManager.getTransaction().commit();
entityManager.clear();
// Revision 2 - deletion
entityManager.getTransaction().begin();
professor = entityManager.find( Professor.class, professor.getId() );
student = entityManager.find( Student.class, student.getId() );
entityManager.remove( professor );
entityManager.remove( student );
// the issue is student.getProfessors() throws a LazyInitializationException.
entityManager.getTransaction().commit();
}
finally {
entityManager.close();
}
}
}