📄 masterdetailtest.java
字号:
s = openSession(); t = s.beginTransaction(); Detail dd = (Detail) s.load(Detail.class, did); master = dd.getMaster(); assertTrue( "detail-master", master.getDetails().contains(dd) ); assertTrue( s.filter( master.getDetails(), "order by this.i desc").size()==2 ); assertTrue( s.filter( master.getDetails(), "select this where this.id > -1").size()==2 ); Query q = s.createFilter( master.getDetails(), "where this.id > :id" ); q.setInteger("id", -1); assertTrue( q.list().size()==2 ); q = s.createFilter( master.getDetails(), "where this.id > :id1 and this.id < :id2" ); q.setInteger("id1", -1); q.setInteger("id2", 99999999); assertTrue( q.list().size()==2 ); q.setInteger("id2", -1); assertTrue( q.list().size()==0 ); q = s.createFilter( master.getDetails(), "where this.id in (:ids)" ); list = new ArrayList(); list.add(did); list.add( new Long(-1) ); q.setParameterList("ids", list); assertTrue( q.list().size()==1 ); assertTrue( q.iterate().hasNext() ); assertTrue( s.filter( master.getDetails(), "where this.id > -1").size()==2 ); assertTrue( s.filter( master.getDetails(), "select this.master where this.id > -1").size()==2 ); assertTrue( s.filter( master.getDetails(), "select m from m in class Master where this.id > -1 and this.master=m").size()==2 ); assertTrue( s.filter( master.getIncoming(), "where this.id > -1 and this.name is not null").size()==0 ); assertTrue( s.createFilter( master.getDetails(), "select max(this.i)" ).iterate().next() instanceof Integer ); assertTrue( s.createFilter( master.getDetails(), "select max(this.i) group by this.id" ).iterate().next() instanceof Integer ); assertTrue( s.createFilter( master.getDetails(), "select count(*)" ).iterate().next() instanceof Integer ); assertTrue( s.createFilter( master.getDetails(), "select this.master" ).list().size()==2 ); assertTrue( s.filter( master.getMoreDetails(), "" ).size()==0 ); assertTrue( s.filter( master.getIncoming(), "" ).size()==0 ); Query f = s.createFilter( master.getDetails(), "select max(this.i) where this.i < :top and this.i>=:bottom" ); f.setInteger("top", 100); f.setInteger("bottom", 0); assertEquals( f.iterate().next(), new Integer(12) ); f.setInteger("top", 2); assertEquals( f.iterate().next(), new Integer(0) ); f = s.createFilter( master.getDetails(), "select max(this.i) where this.i not in (:list)" ); Collection coll = new ArrayList(); coll.add( new Integer(-666) ); coll.add( new Integer(22) ); coll.add( new Integer(0) ); f.setParameterList("list", coll); assertEquals( f.iterate().next(), new Integer(12) ); f = s.createFilter( master.getDetails(), "select max(this.i) where this.i not in (:list) and this.master.name = :listy2" ); f.setParameterList("list", coll); f.setParameter( "listy2", master.getName() ); assertEquals( f.iterate().next(), new Integer(12) ); iter = master.getDetails().iterator(); i=0; while ( iter.hasNext() ) { Detail d = (Detail) iter.next(); assertTrue( "master-detail", d.getMaster()==master ); s.delete(d); i++; } assertTrue( "master-detail", i==2 ); s.delete(master); t.commit(); s.close(); } public void testIncomingOutgoing() throws Exception { if (getDialect() instanceof HSQLDialect) return; Session s = openSession(); Master master1 = new Master(); Master master2 = new Master(); Master master3 = new Master(); s.save(master1); s.save(master2); s.save(master3); master1.addIncoming(master2); master2.addOutgoing(master1); master1.addIncoming(master3); master3.addOutgoing(master1); Serializable m1id = s.getIdentifier(master1); assertTrue( s.filter( master1.getIncoming(), "where this.id > 0 and this.name is not null").size()==2 ); s.flush(); s.connection().commit(); s.close(); s = openSession(); master1 = (Master) s.load(Master.class, m1id); Iterator iter = master1.getIncoming().iterator(); int i=0; while ( iter.hasNext() ) { Master m = (Master) iter.next(); assertTrue( "outgoing", m.getOutgoing().size()==1 ); assertTrue( "outgoing", m.getOutgoing().contains(master1) ); s.delete(m); i++; } assertTrue( "incoming-outgoing", i==2 ); s.delete(master1); s.flush(); s.connection().commit(); s.close(); } public void testCascading() throws Exception { if (getDialect() instanceof HSQLDialect) return; Session s = openSession(); Detail d1 = new Detail(); Detail d2 = new Detail(); d2.setI(22); Master m = new Master(); Master m0 = new Master(); Serializable m0id = s.save(m0); m0.addDetail(d1); m0.addDetail(d2); d1.setMaster(m0); d2.setMaster(m0); m.getMoreDetails().add(d1); m.getMoreDetails().add(d2); Serializable mid = s.save(m); s.flush(); s.connection().commit(); s.close(); s = openSession(); m = (Master) s.load(Master.class, mid); assertTrue( "cascade save", m.getMoreDetails().size()==2 ); assertTrue( "cascade save", ( (Detail) m.getMoreDetails().iterator().next() ).getMaster().getDetails().size()==2 ); s.delete(m); s.delete( s.load(Master.class, m0id) ); s.flush(); s.connection().commit(); s.close(); } /*public void testCascading2() throws Exception { Session s = sessionsopenSession(); Detail d1 = new Detail(); Detail d2 = new Detail(); Master m = new Master(); m.getMoreDetails().add(d1); m.getMoreDetails().add(d2); Serializable mid = s.save(m); s.flush(); s.connection().commit(); s.close(); s = sessionsopenSession(); m = (Master) s.load(Master.class, mid); assertTrue( m.getMoreDetails().size()==2, "cascade save" ); s.delete(m); s.flush(); s.connection().commit(); s.close(); }*/ public void testNamedQuery() throws Exception { Session s = openSession(); Query q = s.getNamedQuery("all_details"); q.list(); s.connection().commit(); s.close(); } public void testSerialization() throws Exception { if (getDialect() instanceof HSQLDialect) return; Session s = openSession(); Master m = new Master(); Detail d1 = new Detail(); Detail d2 = new Detail(); Serializable mid = s.save(m); d1.setMaster(m); d2.setMaster(m); m.addDetail(d1); m.addDetail(d2); if (getDialect() instanceof SybaseDialect) { s.save(d1); } else { s.save( d1, new Long(666) ); } //s.save(d2); s.flush(); s.connection().commit(); s.disconnect(); ByteArrayOutputStream os = new ByteArrayOutputStream(); new ObjectOutputStream(os).writeObject(s); byte[] bytes = os.toByteArray(); System.out.println(bytes.length); s = (Session) new ObjectInputStream( new ByteArrayInputStream(bytes) ).readObject(); s.reconnect(); Master m2 = (Master) s.load(Master.class, mid); assertTrue( "serialized state", m2.getDetails().size()==2 ); Iterator iter = m2.getDetails().iterator(); while ( iter.hasNext() ) { Detail d = (Detail) iter.next(); assertTrue( "deserialization", d.getMaster()==m2 ); try { s.getIdentifier(d); s.delete(d); } catch (Exception e) {} } s.delete(m2); s.flush(); s.connection().commit(); s.close(); s = openSession(); mid = s.save( new Master() ); Serializable mid2 = s.save( new Master() ); s.flush(); s.connection().commit(); s.disconnect(); os = new ByteArrayOutputStream(); new ObjectOutputStream(os).writeObject(s); bytes = os.toByteArray(); System.out.println(bytes.length); s = (Session) new ObjectInputStream( new ByteArrayInputStream(bytes) ).readObject(); s.reconnect(); s.delete( s.load(Master.class, mid) ); s.delete( s.load(Master.class, mid2) ); s.flush(); s.connection().commit(); s.close(); s = openSession(); s.connection(); //force session to grab a connection try { os = new ByteArrayOutputStream(); new ObjectOutputStream(os).writeObject(s); } catch (Exception e) { assertTrue("illegal state", e instanceof IllegalStateException ); s.connection().commit(); s.close(); return; } assertTrue("serialization should have failed", false); } public void testUpdateLazyCollections() throws Exception { if (getDialect() instanceof HSQLDialect) return; Session s = openSession(); Master m = new Master(); Detail d1 = new Detail(); Detail d2 = new Detail(); d2.setX(14); Serializable mid = s.save(m); //s.flush(); d1.setMaster(m); d2.setMaster(m); m.addDetail(d1); m.addDetail(d2); if (getDialect() instanceof SybaseDialect) { s.save(d1); s.save(d2); } else { s.save( d1, new Long(666) ); s.save( d2, new Long(667) ); } s.flush(); s.connection().commit(); s.close(); s = openSession(); m = (Master) s.load(Master.class, mid); s.connection().commit(); s.close(); m.setName("New Name"); s = openSession(); s.update(m, mid); Iterator iter = m.getDetails().iterator(); int i=0; while ( iter.hasNext() ) { assertTrue( iter.next()!=null ); i++; } assertTrue(i==2); iter = m.getDetails().iterator(); while ( iter.hasNext() ) s.delete( iter.next() ); s.delete(m); s.flush(); s.connection().commit(); s.close(); } public void testMultiLevelCascade() throws Exception { if (getDialect() instanceof HSQLDialect) return; Session s = openSession(); Detail detail = new Detail(); SubDetail subdetail = new SubDetail(); Master m = new Master(); Master m0 = new Master(); Serializable m0id = s.save(m0); m0.addDetail(detail); detail.setMaster(m0); m.getMoreDetails().add(detail); detail.setSubDetails( new HashSet() ); detail.getSubDetails().add(subdetail); Serializable mid = s.save(m); s.flush(); s.connection().commit(); s.close(); s = openSession(); m = (Master) s.load( Master.class, mid ); assertTrue( ( (Detail) m.getMoreDetails().iterator().next() ).getSubDetails().size()!=0 ); s.delete(m); assertTrue( s.find("from sd in class SubDetail").size()==0 ); assertTrue( s.find("from d in class Detail").size()==0 ); s.delete( s.load(Master.class, m0id) ); s.flush(); s.connection().commit(); s.close(); } public void testMixNativeAssigned() throws Exception { if (getDialect() instanceof HSQLDialect) return; Session s = openSession(); Category c = new Category(); c.setName("NAME"); Assignable assn = new Assignable(); assn.setId("i.d."); List l = new ArrayList(); l.add(c); assn.setCategories(l); c.setAssignable(assn); s.save(assn); s.flush(); s.connection().commit(); s.close(); s = openSession(); s.delete(assn); s.flush(); s.connection().commit(); s.close(); } public void testCollectionReplaceOnUpdate() throws Exception { Session s = openSession(); Transaction t = s.beginTransaction(); Category c = new Category(); List list = new ArrayList(); c.setSubcategories(list); list.add( new Category() ); s.save(c); t.commit(); s.close(); c.setSubcategories(list); s = openSession(); t = s.beginTransaction(); s.update(c); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); c = (Category) s.load( Category.class, new Long( c.getId() ), LockMode.UPGRADE ); List list2 = c.getSubcategories(); t.commit(); s.close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -