Methods Summary |
---|
protected void | configure(org.hibernate.cfg.Configuration cfg)
super.configure( cfg );
|
protected java.lang.String[] | getMappings()
return new String[] { "hql/Animal.hbm.xml" };
|
public static junit.framework.Test | suite()
return new TestSuite( WithClauseTest.class );
|
public void | testInvalidWithSemantics()
Session s = openSession();
Transaction txn = s.beginTransaction();
try {
// PROBLEM : f.bodyWeight is a reference to a column on the Animal table; however, the 'f'
// alias relates to the Human.friends collection which the aonther Human entity. The issue
// here is the way JoinSequence and Joinable (the persister) interact to generate the
// joins relating to the sublcass/superclass tables
s.createQuery( "from Human h inner join h.friends as f with f.bodyWeight < :someLimit" )
.setDouble( "someLimit", 1 )
.list();
fail( "failure expected" );
}
catch( InvalidWithClauseException expected ) {
}
try {
s.createQuery( "from Animal a inner join a.offspring o inner join o.mother as m inner join m.father as f with o.bodyWeight > 1" )
.list();
fail( "failure expected" );
}
catch( InvalidWithClauseException expected ) {
}
try {
s.createQuery( "from Human h inner join h.offspring o with o.mother.father = :cousin" )
.setEntity( "cousin", s.load( Human.class, new Long(123) ) )
.list();
fail( "failure expected" );
}
catch( InvalidWithClauseException expected ) {
}
txn.commit();
s.close();
|
public void | testWithClause()
TestData data = new TestData();
data.prepare();
Session s = openSession();
Transaction txn = s.beginTransaction();
// one-to-many
List list = s.createQuery( "from Human h inner join h.offspring as o with o.bodyWeight < :someLimit" )
.setDouble( "someLimit", 1 )
.list();
assertTrue( "ad-hoc on did not take effect", list.isEmpty() );
// many-to-one
list = s.createQuery( "from Animal a inner join a.mother as m with m.bodyWeight < :someLimit" )
.setDouble( "someLimit", 1 )
.list();
assertTrue( "ad-hoc on did not take effect", list.isEmpty() );
// many-to-many
list = s.createQuery( "from Human h inner join h.friends as f with f.nickName like 'bubba'" )
.list();
assertTrue( "ad-hoc on did not take effect", list.isEmpty() );
txn.commit();
s.close();
data.cleanup();
|
public void | testWithClauseFailsWithFetch()
TestData data = new TestData();
data.prepare();
Session s = openSession();
Transaction txn = s.beginTransaction();
try {
s.createQuery( "from Animal a inner join fetch a.offspring as o with o.bodyWeight = :someLimit" )
.setDouble( "someLimit", 1 )
.list();
fail( "ad-hoc on clause allowed with fetched association" );
}
catch ( HibernateException e ) {
// the expected response...
}
txn.commit();
s.close();
data.cleanup();
|