package org.hibernate.test.bytecode.enhancement.join;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
public class HHH3949TestTask1 extends AbstractHHH3949TestTask {
public void execute() {
// verify the work around query
performQueryAndVerifyResults( "from Person p fetch all properties left join fetch p.vehicle" );
performQueryAndVerifyResults( "from Person p left join fetch p.vehicle" );
}
@SuppressWarnings("unchecked")
private void performQueryAndVerifyResults(String query) {
// 1) open session
Session session = getFactory().openSession();
session.getTransaction().begin();
// 2) perform the query
List<Person> persons = (List<Person>) session.createQuery( query ).list();
// 3) close the session : this ensures that no more queries and/or data loading happen
session.getTransaction().commit();
session.close();
// 4) verify the results
for ( Person person : persons ) {
assertTrue( Hibernate.isInitialized( person ) );
if ( shouldHaveVehicle( person ) ) {
assertNotNull( person.getVehicle() );
assertTrue( Hibernate.isInitialized( person.getVehicle() ) );
assertNotNull( person.getVehicle().getDriver() );
}
}
}
}