【Java开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了Java开源代码-WithClauseTest.java的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
// $Id: WithClauseTest.java 9528 2006-03-01 04:24:08Z steve.3710167@qq.com $
package org.hibernate.test.hql;
import org.hibernate.test.TestCase;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.HibernateException;
import org.hibernate.QueryException;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Implementation of WithClauseTest.
*
* @author Steve Ebersole
*/
public class WithClauseTest extends TestCase {
public WithClauseTest(String name) {
super( name );
}
protected String[] getMappings() {
return new String[] { "hql/Animal.hbm.
xml" };
}
public static Test suite() {
return new TestSuite( WithClauseTest.class );
}
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 ) {
System.out.println( "TEST (OK) : " + e.getMessage() );
// the expected response...
}
txn.commit();
s.close();
data.cleanup();
}
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( QueryException qe ) {
if ( qe.getMessage().indexOf( "can only reference columns in the driving table" ) < 0 ) {
fail( "unexpected failure type [" + qe.getMessage() + "]" );
}
}
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( QueryException qe ) {
if ( qe.getMessage().indexOf( "with-clause expressions did not reference from-clause element to which the with-clause was associated" ) < 0 ) {
fail( "unexpected failure type [" + qe.getMessage() + "]" );
}
}
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( QueryException qe ) {
if ( qe.getMessage().indexOf( "with-clause expressions did not reference from-clause element to which the with-clause was associated" ) < 0 ) {
fail( "unexpected failure type [" + qe.getMessage() + "]" );
}
}
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();
}
private class TestData {
public void prepare() {
Session session = openSession();
Transaction txn = session.beginTransaction();
Human mother = new Human();
mother.setBodyWeight( 10 );
mother.setDescription( "mother" );
Human father = new Human();
father.setBodyWeight( 15 );
father.setDescription( "father" );
Human child1 = new Human();
child1.setBodyWeight( 5 );
child1.setDescription( "child1" );
Human child2 = new Human();
child2.setBo