package org.hibernate.test.instrument.cases;
import junit.framework.Assert;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.test.instrument.domain.EntityWithOneToOnes;
import org.hibernate.test.instrument.domain.OneToOneNoProxy;
import org.hibernate.test.instrument.domain.OneToOneProxy;
/**
*
* @author Gail Badner
*/
public class TestSharedPKOneToOneExecutable extends AbstractExecutable {
protected String[] getResources() {
return new String[] {"org/hibernate/test/instrument/domain/SharedPKOneToOne.hbm.xml"};
}
public void execute() {
Session s = getFactory().openSession();
Transaction t = s.beginTransaction();
EntityWithOneToOnes root = new EntityWithOneToOnes( "root" );
OneToOneProxy oneToOneProxy = new OneToOneProxy( "oneToOneProxy" );
root.setOneToOneProxy( oneToOneProxy );
oneToOneProxy.setEntity( root );
OneToOneNoProxy oneToOneNoProxy = new OneToOneNoProxy( "oneToOneNoProxy" );
root.setOneToOneNoProxy( oneToOneNoProxy );
oneToOneNoProxy.setEntity( root );
s.save( root );
t.commit();
s.close();
// NOTE : oneToOneProxy is mapped with lazy="proxy"; oneToOneNoProxy with lazy="no-proxy"...
s = getFactory().openSession();
t = s.beginTransaction();
// load root
root = ( EntityWithOneToOnes ) s.load( EntityWithOneToOnes.class, root.getId() );
Assert.assertFalse( Hibernate.isInitialized( root ) );
Assert.assertFalse( Hibernate.isPropertyInitialized( root, "name" ) );
Assert.assertFalse( Hibernate.isPropertyInitialized( root, "oneToOneProxy" ) );
Assert.assertFalse( Hibernate.isPropertyInitialized( root, "oneToOneNoProxy" ) );
root.getName();
Assert.assertTrue( Hibernate.isInitialized( root ) );
Assert.assertTrue( Hibernate.isPropertyInitialized( root, "name" ) );
Assert.assertTrue( Hibernate.isPropertyInitialized( root, "oneToOneProxy" ) );
Assert.assertFalse( Hibernate.isPropertyInitialized( root, "oneToOneNoProxy" ) );
// get a handle to the oneToOneProxy proxy reference (and make certain that
// this does not force the lazy properties of the root entity
// to get initialized.
root.getOneToOneProxy();
Assert.assertTrue( Hibernate.isInitialized( oneToOneProxy ) );
Assert.assertTrue( Hibernate.isPropertyInitialized( root.getOneToOneProxy(), "name" ) );
Assert.assertFalse( Hibernate.isPropertyInitialized( root, "oneToOneNoProxy" ) );
root.getOneToOneNoProxy();
Assert.assertTrue( Hibernate.isPropertyInitialized( root, "oneToOneNoProxy" ) );
Assert.assertTrue( Hibernate.isPropertyInitialized( root.getOneToOneNoProxy(), "name") );
s.delete( root );
t.commit();
s.close();
}
}