📄 multitabletest.java
字号:
//$Id: MultiTableTest.java,v 1.1.2.6 2003/11/29 07:39:17 oneovthafew Exp $package org.hibernate.test;import java.io.Serializable;import java.util.ArrayList;import java.util.Date;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;import junit.framework.Test;import junit.framework.TestSuite;import junit.textui.TestRunner;import net.sf.hibernate.LockMode;import net.sf.hibernate.Session;import net.sf.hibernate.Transaction;import net.sf.hibernate.dialect.HSQLDialect;import net.sf.hibernate.dialect.MySQLDialect;import net.sf.hibernate.dialect.SybaseDialect;import net.sf.hibernate.expression.Expression;public class MultiTableTest extends TestCase { public MultiTableTest(String arg0) { super(arg0); } public void testJoins() throws Exception { Session s = openSession(); s.find("from SubMulti sm join sm.children smc where smc.name > 'a'"); s.find("select s, ya from Lower s join s.yetanother ya"); s.find("from Lower s1 join s1.bag s2"); s.find("from Lower s1 left join s1.bag s2"); s.find("select s, a from Lower s join s.another a"); s.find("select s, a from Lower s left join s.another a"); s.find("from Top s, Lower ls"); s.find("from Lower ls join ls.set s where s.name > 'a'"); s.find("from Po po join po.list sm where sm.name > 'a'"); s.find("from Lower ls inner join ls.another s where s.name is not null"); s.find("from Lower ls where ls.other.another.name is not null"); s.find("from Multi m where m.derived like 'F%'"); s.find("from SubMulti m where m.derived like 'F%'"); s.close(); } public void testSubclassCollection() throws Exception { //if ( getDialect() instanceof HSQLDialect ) return; //TODO: figure out why!? Session s = openSession(); SubMulti sm = new SubMulti(); SubMulti sm1 = new SubMulti(); SubMulti sm2 = new SubMulti(); ArrayList list = new ArrayList(); ArrayList anotherList = new ArrayList(); sm.setChildren(list); sm.setMoreChildren(anotherList); sm.setExtraProp("foo"); list.add(sm1); list.add(sm2); anotherList.add(sm1); anotherList.add(sm2); sm1.setParent(sm); sm2.setParent(sm); Serializable id = s.save(sm); s.save(sm1); s.save(sm2); s.flush(); s.connection().commit(); s.close(); getSessions().evict(SubMulti.class); s = openSession(); s.connection().createStatement().executeQuery( "select * from leafsubsubclass sm, nonleafsubclass m, rootclass s where sm.sid=m.sid and sm.sid=s.id1_ and sm.sid=1" ).next(); assertTrue( s.find("select s from SubMulti as sm join sm.children as s where s.amount>-1 and s.name is null").size()==2 ); assertTrue( s.find("select elements(sm.children) from SubMulti as sm").size()==2 ); assertTrue( s.find("select distinct sm from SubMulti as sm join sm.children as s where s.amount>-1 and s.name is null").size()==1 ); sm = (SubMulti) s.load(SubMulti.class, id); assertTrue( sm.getChildren().size()==2 ); assertEquals( s.filter( sm.getMoreChildren(), "select count(*) where this.amount>-1 and this.name is null" ).iterator().next(), new Integer(2) ); assertEquals( "FOO", sm.getDerived() ); assertSame( s.iterate("select distinct s from s in class SubMulti where s.moreChildren[1].amount < 1.0").next(), sm ); assertTrue( sm.getMoreChildren().size()==2 ); s.delete(sm); Iterator iter = sm.getChildren().iterator(); while ( iter.hasNext() ) s.delete( iter.next() ); s.flush(); s.connection().commit(); s.close(); } public void testCollectionOnly() throws Exception { Session s = openSession(); Transaction t = s.beginTransaction(); Mono m = new Mono(); Long id = (Long) s.save(m); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); s.update(m, id); s.flush(); m.setAddress("foo bar"); s.flush(); s.delete(m); t.commit(); s.close(); } public void testQueries() throws Exception { Session s = openSession(); Long id = new Long(1); if (getDialect() instanceof SybaseDialect) { id = (Long) s.save( new TrivialClass() ); } else{ s.save( new TrivialClass(), id ); } s.flush(); s.connection().commit(); s.close(); s = openSession(); TrivialClass tc = (TrivialClass) s.load(TrivialClass.class, id); s.find("from s in class TrivialClass where s.id = 2"); s.find("select s.count from s in class Top"); s.find("from s in class Lower where s.another.name='name'"); s.find("from s in class Lower where s.yetanother.name='name'"); s.find("from s in class Lower where s.yetanother.name='name' and s.yetanother.foo is null"); s.find("from s in class Top where s.count=1"); s.find("select s.count from s in class Top, ls in class Lower where ls.another=s"); s.find("select ls.bag.elements, ls.set.elements from ls in class Lower"); s.iterate("from s in class Lower"); s.iterate("from s in class Top"); s.delete(tc); s.flush(); s.connection().commit(); s.close(); } public void testConstraints() throws Exception { Session s = openSession(); Transaction t = s.beginTransaction(); SubMulti sm = new SubMulti(); sm.setAmount(66.5f); if ( getDialect() instanceof SybaseDialect ) { s.save(sm); } else { s.save( sm, new Long(2) ); } t.commit(); s.close(); s = openSession(); s.delete( "from sm in class SubMulti" ); t = s.beginTransaction(); t.commit(); s.close(); } public void testMultiTable() throws Exception { Session s = openSession(); Transaction t = s.beginTransaction(); Multi multi = new Multi(); multi.setExtraProp("extra"); //multi.setCount(666); multi.setName("name"); Top simp = new Top(); simp.setDate( new Date() ); simp.setName("simp"); //simp.setCount(132); Serializable mid; Serializable sid; if ( getDialect() instanceof SybaseDialect ) { mid = s.save(multi); sid = s.save(simp); } else { mid = new Long(123); s.save(multi, mid); sid = new Long(1234); s.save(simp, sid); } SubMulti sm = new SubMulti(); sm.setAmount(66.5f); Serializable smid; if (getDialect() instanceof SybaseDialect) { smid = s.save(sm); } else { smid = new Long(2); s.save(sm, smid); } t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); multi.setExtraProp( multi.getExtraProp() + "2" ); //multi.setCount( multi.getCount() + 1 ); multi.setName("new name"); s.update(multi, mid); simp.setName("new name"); s.update(simp, sid); sm.setAmount(456.7f); s.update(sm, smid); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); multi = (Multi) s.load(Multi.class, mid); assertTrue( multi.getExtraProp().equals("extra2") ); multi.setExtraProp( multi.getExtraProp() + "3" ); //multi.setCount( multi.getCount() + 1 ); assertTrue( multi.getName().equals("new name") ); multi.setName("newer name"); sm = (SubMulti) s.load(SubMulti.class, smid); assertTrue( sm.getAmount()==456.7f ); sm.setAmount(23423f); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); multi = (Multi) s.load(Top.class, mid); simp = (Top) s.load(Top.class, sid); assertTrue( ! (simp instanceof Multi) ); assertTrue( multi.getExtraProp().equals("extra23") ); //multi.setCount( multi.getCount() + 1 ); assertTrue( multi.getName().equals("newer name") ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); Iterator iter = s.iterate("select\n\ns from s in class Top where s.count>0"); boolean foundSimp = false; boolean foundMulti = false; boolean foundSubMulti = false; while ( iter.hasNext() ) { Object o = iter.next(); if ( ( o instanceof Top ) && !( o instanceof Multi) ) foundSimp = true; if ( o instanceof Multi && !(o instanceof SubMulti) ) foundMulti = true; if ( o instanceof SubMulti ) foundSubMulti = true; } assertTrue( foundSimp&&foundMulti&&foundSubMulti ); s.find("from m in class Multi where m.count>0 and m.extraProp is not null"); s.find("from m in class Top where m.count>0 and m.name is not null"); s.find("from m in class Lower where m.other is not null"); s.find("from m in class Multi where m.other.id = 1"); s.find("from m in class SubMulti where m.amount > 0.0"); assertTrue( s.find("from m in class Multi").size()==2 ); assertTrue( s.find("from m in class Multi where m.class = SubMulti").size()==1 ); assertTrue( s.find("from m in class Top where m.class = Multi").size()==1 ); assertTrue( s.find("from s in class Top").size()==3 ); assertTrue( s.find("from ls in class Lower").size()==0 ); assertTrue( s.find("from sm in class SubMulti").size()==1 ); s.find("from ls in class Lower, s in ls.bag.elements where s.id is not null"); s.find("from ls in class Lower, s in ls.set.elements where s.id is not null"); if ( !(getDialect() instanceof MySQLDialect) ) s.find("from sm in class SubMulti where exists sm.children.elements"); assertTrue( s.createCriteria(Top.class).list().size()==3 ); assertTrue( s.createCriteria(SubMulti.class).list().size()==1 ); assertTrue( s.createCriteria(SubMulti.class) .add( Expression.lt("amount", new Float(0)) ) .list() .size()==0 ); assertTrue( s.createCriteria(SubMulti.class) .add( Expression.ge("amount", new Float(0)) ) .list() .size()==1 ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); multi = (Multi) s.load(Top.class, mid, LockMode.UPGRADE); simp = (Top) s.load(Top.class, sid); s.lock(simp, LockMode.UPGRADE_NOWAIT); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); s.update(multi, mid); s.delete(multi); assertTrue( s.delete("from s in class Top")==2); t.commit(); s.close(); } public void testMultiTableGeneratedId() throws Exception { Session s = openSession(); Transaction t = s.beginTransaction();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -