📄 multitabletest.java
字号:
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 multiId = s.save( multi ); Serializable simpId = s.save( simp ); SubMulti sm = new SubMulti(); sm.setAmount(66.5f); Serializable smId = s.save( sm ); 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, multiId ); simp.setName("new name"); s.update( simp, simpId ); sm.setAmount(456.7f); s.update( sm, smId ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); multi = (Multi) s.load( Multi.class, multiId ); 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, multiId ); simp = (Top) s.load( Top.class, simpId ); 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 = 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"); if ( !(getDialect() instanceof MySQLDialect) ) s.find("from sm in class SubMulti where exists sm.children.elements"); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); multi = (Multi) s.load( Top.class, multiId, LockMode.UPGRADE ); simp = (Top) s.load( Top.class, simpId ); s.lock(simp, LockMode.UPGRADE_NOWAIT); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); s.update( multi, multiId ); s.delete(multi); assertTrue( s.delete("from s in class Top")==2); t.commit(); s.close(); } public void testMultiTableCollections() throws Exception { if ( getDialect() instanceof HSQLDialect ) return; Session s = openSession(); Transaction t = s.beginTransaction(); assertTrue( s.find("from s in class Top").size()==0 ); 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); sid = new Long(1234); s.save(multi, mid); s.save(simp, sid); } Lower ls = new Lower(); ls.setOther(ls); ls.setAnother(ls); ls.setYetanother(ls); ls.setName("Less Simple"); Set set = new HashSet(); ls.setSet(set); set.add(multi); set.add(simp); Serializable id; if ( getDialect() instanceof SybaseDialect ) { id = s.save(ls); } else { id = new Long(2); s.save( ls, new Long(2) ); } t.commit(); s.close(); assertTrue( ls.getOther()==ls && ls.getAnother()==ls && ls.getYetanother()==ls ); s = openSession(); t = s.beginTransaction(); ls = (Lower) s.load(Lower.class, id); assertTrue( ls.getOther()==ls && ls.getAnother()==ls && ls.getYetanother()==ls ); assertTrue( ls.getSet().size()==2 ); Iterator iter = ls.getSet().iterator(); int foundMulti = 0; int foundSimple = 0; while ( iter.hasNext() ) { Object o = iter.next(); if ( o instanceof Top ) foundSimple++; if ( o instanceof Multi ) foundMulti++; } assertTrue( foundSimple==2 && foundMulti==1 ); assertTrue( s.delete("from s in class Top")==3 ); t.commit(); s.close(); } public void testMultiTableManyToOne() throws Exception { if ( getDialect() instanceof HSQLDialect ) return; Session s = openSession(); Transaction t = s.beginTransaction(); assertTrue( s.find("from s in class Top").size()==0 ); 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; if ( getDialect() instanceof SybaseDialect ) { mid = s.save(multi); } else { mid = new Long(123); s.save(multi, mid); } Lower ls = new Lower(); ls.setOther(ls); ls.setAnother(multi); ls.setYetanother(ls); ls.setName("Less Simple"); Serializable id; if ( getDialect() instanceof SybaseDialect ) { id = s.save(ls); } else { id = new Long(2); s.save( ls, new Long(2) ); } t.commit(); s.close(); assertTrue( ls.getOther()==ls && ls.getAnother()==multi && ls.getYetanother()==ls ); s = openSession(); t = s.beginTransaction(); ls = (Lower) s.load(Lower.class, id); assertTrue( ls.getOther()==ls && ls.getYetanother()==ls ); assertTrue( ls.getAnother().getName().equals("name") && ls.getAnother() instanceof Multi ); s.delete(ls); s.delete( ls.getAnother() ); t.commit(); s.close(); } public void testMultiTableNativeId() throws Exception { Session s = openSession(); Transaction t = s.beginTransaction(); Multi multi = new Multi(); multi.setExtraProp("extra"); Long id = (Long) s.save(multi); assertTrue( id!=null ); s.delete(multi); t.commit(); s.close(); } public void testCollection() throws Exception { Session s = openSession(); Transaction t = s.beginTransaction(); Multi multi1 = new Multi(); multi1.setExtraProp("extra1"); Multi multi2 = new Multi(); multi2.setExtraProp("extra2"); Po po = new Po(); multi1.setPo(po); multi2.setPo(po); po.setSet( new HashSet() ); po.getSet().add(multi1); po.getSet().add(multi2); po.setList( new ArrayList() ); //po.getList().add(null); po.getList().add( new SubMulti() ); Serializable id = s.save(po); assertTrue( id!=null ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); po = (Po) s.load(Po.class, id); assertTrue( po.getSet().size()==2 ); assertTrue( po.getList().size()==1 ); s.delete(po); assertTrue( s.find("from s in class Top").size()==0 ); t.commit(); s.close(); } public void testOneToOne() throws Exception { Session s = openSession(); Lower ls = new Lower(); Serializable id = s.save(ls); s.flush(); s.connection().commit(); s.close(); s = openSession(); s.load(Lower.class, id); s.connection().commit(); s.close(); s = openSession(); s.delete( s.load(Lower.class, id) ); s.flush(); s.connection().commit(); s.close(); } public void testCollectionPointer() throws Exception { Session sess = openSession(); Lower ls = new Lower(); List list = new ArrayList(); ls.setBag(list); Top s = new Top(); Serializable id = sess.save(ls); sess.save(s); sess.flush(); list.add(s); sess.flush(); sess.connection().commit(); sess.close(); sess = openSession(); ls = (Lower) sess.load(Lower.class, id); assertTrue( ls.getBag().size()==1 ); sess.delete("from o in class java.lang.Object"); sess.flush(); sess.connection().commit(); sess.close(); } public String[] getMappings() { return new String[] { "Multi.hbm.xml", "MultiExtends.hbm.xml" }; } public static Test suite() { return new TestSuite(MultiTableTest.class); } public static void main(String[] args) throws Exception { TestRunner.run( suite() ); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -