/*
* 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.jpa.test.cascade.multilevel;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import org.junit.Test;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.transaction.TransactionUtil;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
public class MultiLevelCascadeTest extends BaseEntityManagerFunctionalTestCase {
@TestForIssue( jiraKey = "HHH-5299" )
@Test
public void test() {
final Top top = new Top();
;
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> {
entityManager.persist( top );
// Flush 1
entityManager.flush();
Middle middle = new Middle( 1l );
top.addMiddle( middle );
middle.setTop( top );
Bottom bottom = new Bottom();
middle.setBottom( bottom );
bottom.setMiddle( middle );
Middle middle2 = new Middle( 2l );
top.addMiddle( middle2 );
middle2.setTop( top );
Bottom bottom2 = new Bottom();
middle2.setBottom( bottom2 );
bottom2.setMiddle( middle2 );
// Flush 2
entityManager.flush();
} );
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> {
Top finded = entityManager.find( Top.class, top.getId() );
assertEquals( 2, finded.getMiddles().size() );
for ( Middle loadedMiddle : finded.getMiddles() ) {
assertSame( finded, loadedMiddle.getTop() );
assertNotNull( loadedMiddle.getBottom() );
}
entityManager.remove( finded );
} );
}
@Override
protected Class[] getAnnotatedClasses() {
return new Class[] { Top.class, Middle.class, Bottom.class };
}
}