fumtest.java
来自「好东西,hibernate-3.2.0,他是一开元的树杖hibernate-3.」· Java 代码 · 共 882 行 · 第 1/2 页
JAVA
882 行
//$Id: FumTest.java 9636 2006-03-16 14:14:48Z max.andersen@jboss.com $
package org.hibernate.test.legacy;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.FlushMode;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.dialect.MckoiDialect;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.PointbaseDialect;
import org.hibernate.dialect.TimesTenDialect;
import org.hibernate.transform.AliasToBeanResultTransformer;
import org.hibernate.transform.Transformers;
import org.hibernate.type.DateType;
import org.hibernate.type.EntityType;
import org.hibernate.type.StringType;
import org.hibernate.type.Type;
public class FumTest extends LegacyTestCase {
private static short fumKeyShort = 1;
public FumTest(String arg) {
super(arg);
}
public void testQuery() {
Session s = openSession();
Transaction t = s.beginTransaction();
s.createQuery("from Fum fum where fum.fo.id.string = 'x'").list();
t.commit();
s.close();
}
public void testCriteriaCollection() throws Exception {
Session s = openSession();
Fum fum = new Fum( fumKey("fum") );
fum.setFum("a value");
fum.getMapComponent().getFummap().put("self", fum);
fum.getMapComponent().getStringmap().put("string", "a staring");
fum.getMapComponent().getStringmap().put("string2", "a notha staring");
fum.getMapComponent().setCount(1);
s.save(fum);
s.flush();
s.connection().commit();
s.close();
s = openSession();
Fum b = (Fum) s.createCriteria(Fum.class).add(
Expression.in("fum", new String[] { "a value", "no value" } )
)
.uniqueResult();
//assertTrue( Hibernate.isInitialized( b.getMapComponent().getFummap() ) );
assertTrue( Hibernate.isInitialized( b.getMapComponent().getStringmap() ) );
assertTrue( b.getMapComponent().getFummap().size()==1 );
assertTrue( b.getMapComponent().getStringmap().size()==2 );
s.delete(b);
s.flush();
s.connection().commit();
s.close();
}
public void testCriteria() throws Exception {
Session s = openSession();
Transaction txn = s.beginTransaction();
Fum fum = new Fum( fumKey("fum") );
fum.setFo( new Fum( fumKey("fo") ) );
fum.setFum("fo fee fi");
fum.getFo().setFum("stuff");
Fum fr = new Fum( fumKey("fr") );
fr.setFum("goo");
Fum fr2 = new Fum( fumKey("fr2") );
fr2.setFum("soo");
fum.setFriends( new HashSet() );
fum.getFriends().add(fr);
fum.getFriends().add(fr2);
s.save(fr);
s.save(fr2);
s.save( fum.getFo() );
s.save(fum);
Criteria base = s.createCriteria(Fum.class)
.add( Expression.like("fum", "f", MatchMode.START) );
base.createCriteria("fo")
.add( Expression.isNotNull("fum") );
base.createCriteria("friends")
.add( Expression.like("fum", "g%") );
List list = base.list();
assertTrue( list.size()==1 && list.get(0)==fum );
base = s.createCriteria(Fum.class)
.add( Expression.like("fum", "f%") )
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
base.createCriteria("fo", "fo")
.add( Expression.isNotNull("fum") );
base.createCriteria("friends", "fum")
.add( Expression.like("fum", "g", MatchMode.START) );
Map map = (Map) base.uniqueResult();
assertTrue(
map.get("this")==fum &&
map.get("fo")==fum.getFo() &&
fum.getFriends().contains( map.get("fum") ) &&
map.size()==3
);
base = s.createCriteria(Fum.class)
.add( Expression.like("fum", "f%") )
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
.setFetchMode("friends", FetchMode.EAGER);
base.createCriteria("fo", "fo")
.add( Expression.eq( "fum", fum.getFo().getFum() ) );
map = (Map) base.list().get(0);
assertTrue(
map.get("this")==fum &&
map.get("fo")==fum.getFo() &&
map.size()==2
);
list = s.createCriteria(Fum.class)
.createAlias("friends", "fr")
.createAlias("fo", "fo")
.add( Expression.like("fum", "f%") )
.add( Expression.isNotNull("fo") )
.add( Expression.isNotNull("fo.fum") )
.add( Expression.like("fr.fum", "g%") )
.add( Expression.eqProperty("fr.id.short", "id.short") )
.list();
assertTrue( list.size()==1 && list.get(0)==fum );
txn.commit();
s.close();
s = openSession();
txn = s.beginTransaction();
base = s.createCriteria(Fum.class)
.add( Expression.like("fum", "f%") );
base.createCriteria("fo")
.add( Expression.isNotNull("fum") );
base.createCriteria("friends")
.add( Expression.like("fum", "g%") );
fum = (Fum) base.list().get(0);
assertTrue( fum.getFriends().size()==2 );
s.delete(fum);
s.delete( fum.getFo() );
Iterator iter = fum.getFriends().iterator();
while ( iter.hasNext() ) s.delete( iter.next() );
txn.commit();
s.close();
}
static public class ABean {
public Fum fum;
public Fum fo;
public Fum getFo() {
return fo;
}
public void setFo(Fum fo) {
this.fo = fo;
}
public Fum getFum() {
return fum;
}
public void setFum(Fum fum) {
this.fum = fum;
}
}
public void testBeanResultTransformer() throws HibernateException, SQLException {
Session s = openSession();
Transaction transaction = s.beginTransaction();
Fum fum = new Fum( fumKey("fum") );
fum.setFo( new Fum( fumKey("fo") ) );
fum.setFum("fo fee fi");
fum.getFo().setFum("stuff");
Fum fr = new Fum( fumKey("fr") );
fr.setFum("goo");
Fum fr2 = new Fum( fumKey("fr2") );
fr2.setFum("soo");
fum.setFriends( new HashSet() );
fum.getFriends().add(fr);
fum.getFriends().add(fr2);
s.save(fr);
s.save(fr2);
s.save( fum.getFo() );
s.save(fum);
Criteria test = s.createCriteria(Fum.class, "xam")
.createCriteria("fo", "fo")
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
Map fc = (Map) test.list().get(0);
assertNotNull(fc.get("xam"));
Criteria base = s.createCriteria(Fum.class, "fum")
.add( Expression.like("fum", "f%") )
.setResultTransformer(Transformers.aliasToBean(ABean.class))
.setFetchMode("friends", FetchMode.JOIN);
base.createCriteria("fo", "fo")
.add( Expression.eq( "fum", fum.getFo().getFum() ) );
ABean map = (ABean) base.list().get(0);
assertTrue(
map.getFum()==fum &&
map.getFo()==fum.getFo() );
s.delete(fr);
s.delete(fr2);
s.delete(fum);
s.delete(fum.getFo());
s.flush();
transaction.commit();
s.close();
}
public void testListIdentifiers() throws Exception {
Session s = openSession();
Transaction txn = s.beginTransaction();
Fum fum = new Fum( fumKey("fum") );
fum.setFum("fo fee fi");
s.save(fum);
fum = new Fum( fumKey("fi") );
fum.setFum("fee fi fo");
s.save(fum);
List list = s.find("select fum.id from Fum as fum where not fum.fum='FRIEND'");
assertTrue( "list identifiers", list.size()==2);
Iterator iter = s.iterate("select fum.id from Fum fum where not fum.fum='FRIEND'");
int i=0;
while ( iter.hasNext() ) {
assertTrue( "iterate identifiers", iter.next() instanceof FumCompositeID);
i++;
}
assertTrue(i==2);
s.delete( s.load(Fum.class, (Serializable) list.get(0) ) );
s.delete( s.load(Fum.class, (Serializable) list.get(1) ) );
txn.commit();
s.close();
}
public FumCompositeID fumKey(String str) {
return fumKey(str,false);
}
private FumCompositeID fumKey(String str, boolean aCompositeQueryTest) {
FumCompositeID id = new FumCompositeID();
if ( getDialect() instanceof MckoiDialect ) {
GregorianCalendar now = new GregorianCalendar();
GregorianCalendar cal = new GregorianCalendar(
now.get(java.util.Calendar.YEAR),
now.get(java.util.Calendar.MONTH),
now.get(java.util.Calendar.DATE)
);
id.setDate( cal.getTime() );
}
else {
id.setDate( new Date() );
}
id.setString( new String(str) );
if (aCompositeQueryTest) {
id.setShort( fumKeyShort++ );
}
else {
id.setShort( (short) 12 );
}
return id;
}
public void testCompositeID() throws Exception {
Session s = openSession();
Transaction txn = s.beginTransaction();
Fum fum = new Fum( fumKey("fum") );
fum.setFum("fee fi fo");
s.save(fum);
assertTrue( "load by composite key", fum==s.load( Fum.class, fumKey("fum") ) );
txn.commit();
s.close();
s = openSession();
txn = s.beginTransaction();
fum = (Fum) s.load( Fum.class, fumKey("fum"), LockMode.UPGRADE );
assertTrue( "load by composite key", fum!=null );
Fum fum2 = new Fum( fumKey("fi") );
fum2.setFum("fee fo fi");
fum.setFo(fum2);
s.save(fum2);
assertTrue(
"find composite keyed objects",
s.find("from Fum fum where not fum.fum='FRIEND'").size()==2
);
assertTrue(
"find composite keyed object",
s.find("select fum from Fum fum where fum.fum='fee fi fo'").get(0)==fum
);
fum.setFo(null);
txn.commit();
s.close();
s = openSession();
txn = s.beginTransaction();
Iterator iter = s.iterate("from Fum fum where not fum.fum='FRIEND'");
int i = 0;
while ( iter.hasNext() ) {
fum = (Fum) iter.next();
//iter.remove();
s.delete(fum);
i++;
}
assertTrue( "iterate on composite key", i==2 );
txn.commit();
s.close();
}
public void testCompositeIDOneToOne() throws Exception {
Session s = openSession();
Transaction txn = s.beginTransaction();
Fum fum = new Fum( fumKey("fum") );
fum.setFum("fee fi fo");
//s.save(fum);
Fumm fumm = new Fumm();
fumm.setFum(fum);
s.save(fumm);
txn.commit();
s.close();
s = openSession();
txn = s.beginTransaction();
fumm = (Fumm) s.load( Fumm.class, fumKey("fum") );
//s.delete( fumm.getFum() );
s.delete(fumm);
txn.commit();
s.close();
}
public void testCompositeIDQuery() throws Exception {
Session s = openSession();
Fum fee = new Fum( fumKey("fee",true) );
fee.setFum("fee");
s.save(fee);
Fum fi = new Fum( fumKey("fi",true) );
fi.setFum("fi");
short fiShort = fi.getId().getShort();
s.save(fi);
Fum fo = new Fum( fumKey("fo",true) );
fo.setFum("fo");
s.save(fo);
Fum fum = new Fum( fumKey("fum",true) );
fum.setFum("fum");
s.save(fum);
s.flush();
s.connection().commit();
s.close();
s = openSession();
// Try to find the Fum object "fo" that we inserted searching by the string in the id
List vList = s.find("from Fum fum where fum.id.string='fo'" );
assertTrue( "find by composite key query (find fo object)", vList.size() == 1 );
fum = (Fum)vList.get(0);
assertTrue( "find by composite key query (check fo object)", fum.getId().getString().equals("fo") );
// Try to find the Fum object "fi" that we inserted searching by the date in the id
vList = s.find("from Fum fum where fum.id.short = ?",new Short(fiShort),Hibernate.SHORT);
assertTrue( "find by composite key query (find fi object)", vList.size() == 1 );
fi = (Fum)vList.get(0);
assertTrue( "find by composite key query (check fi object)", fi.getId().getString().equals("fi") );
// Make sure we can return all of the objects by searching by the date id
assertTrue(
"find by composite key query with arguments",
s.find("from Fum fum where fum.id.date <= ? and not fum.fum='FRIEND'",new Date(),Hibernate.DATE).size()==4
);
s.flush();
s.connection().commit();
s.close();
s = openSession();
assertTrue(
s.iterate("select fum.id.short, fum.id.date, fum.id.string from Fum fum").hasNext()
);
assertTrue(
s.iterate("select fum.id from Fum fum").hasNext()
);
Query qu = s.createQuery("select fum.fum, fum , fum.fum, fum.id.date from Fum fum");
Type[] types = qu.getReturnTypes();
assertTrue(types.length==4);
for ( int k=0; k<types.length; k++) {
assertTrue( types[k]!=null );
}
assertTrue(types[0] instanceof StringType);
assertTrue(types[1] instanceof EntityType);
assertTrue(types[2] instanceof StringType);
assertTrue(types[3] instanceof DateType);
Iterator iter = qu.iterate();
int j = 0;
while ( iter.hasNext() ) {
j++;
assertTrue( ( (Object[]) iter.next() )[1] instanceof Fum );
}
assertTrue( "iterate on composite key", j==8 );
fum = (Fum) s.load( Fum.class, fum.getId() );
s.filter( fum.getQuxArray(), "where this.foo is null" );
s.filter( fum.getQuxArray(), "where this.foo.id = ?", "fooid", Hibernate.STRING );
Query f = s.createFilter( fum.getQuxArray(), "where this.foo.id = :fooId" );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?