📄 astparserloadingtest.java
字号:
Session session = openSession(); List results = session.createQuery( "from Animal" ).list(); assertEquals( "Incorrect result size", 2, results.size() ); assertTrue( "Incorrect result return type", results.get( 0 ) instanceof Animal ); session.close(); destroyTestBaseData(); } public void testSimpleSelect() throws Exception { createTestBaseData(); Session session = openSession(); List results = session.createQuery( "select a from Animal as a" ).list(); assertEquals( "Incorrect result size", 2, results.size() ); assertTrue( "Incorrect result return type", results.get( 0 ) instanceof Animal ); session.close(); destroyTestBaseData(); } public void testEntityPropertySelect() throws Exception { createTestBaseData(); Session session = openSession(); List results = session.createQuery( "select a.mother from Animal as a" ).list();// assertEquals("Incorrect result size", 2, results.size()); assertTrue( "Incorrect result return type", results.get( 0 ) instanceof Animal ); session.close(); destroyTestBaseData(); } public void testWhere() throws Exception { createTestBaseData(); Session session = openSession(); List results = null; results = session.createQuery( "from Animal an where an.bodyWeight > 10" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); results = session.createQuery( "from Animal an where not an.bodyWeight > 10" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); results = session.createQuery( "from Animal an where an.bodyWeight between 0 and 10" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); results = session.createQuery( "from Animal an where an.bodyWeight not between 0 and 10" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); results = session.createQuery( "from Animal an where sqrt(an.bodyWeight)/2 > 10" ).list(); assertEquals( "Incorrect result size", 0, results.size() ); results = session.createQuery( "from Animal an where (an.bodyWeight > 10 and an.bodyWeight < 100) or an.bodyWeight is null" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); session.close(); destroyTestBaseData(); } public void testEntityFetching() throws Exception { createTestBaseData(); Session session = openSession(); List results = session.createQuery( "from Animal an join fetch an.mother" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); assertTrue( "Incorrect result return type", results.get( 0 ) instanceof Animal ); Animal mother = ( ( Animal ) results.get( 0 ) ).getMother(); assertTrue( "fetch uninitialized", mother != null && Hibernate.isInitialized( mother ) ); results = session.createQuery( "select an from Animal an join fetch an.mother" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); assertTrue( "Incorrect result return type", results.get( 0 ) instanceof Animal ); mother = ( ( Animal ) results.get( 0 ) ).getMother(); assertTrue( "fetch uninitialized", mother != null && Hibernate.isInitialized( mother ) ); session.close(); destroyTestBaseData(); } public void testCollectionFetching() throws Exception { createTestBaseData(); Session session = openSession(); List results = session.createQuery( "from Animal an join fetch an.offspring" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); assertTrue( "Incorrect result return type", results.get( 0 ) instanceof Animal ); Collection os = ( ( Animal ) results.get( 0 ) ).getOffspring(); assertTrue( "fetch uninitialized", os != null && Hibernate.isInitialized( os ) && os.size() == 1 ); results = session.createQuery( "select an from Animal an join fetch an.offspring" ).list(); assertEquals( "Incorrect result size", 1, results.size() ); assertTrue( "Incorrect result return type", results.get( 0 ) instanceof Animal ); os = ( ( Animal ) results.get( 0 ) ).getOffspring(); assertTrue( "fetch uninitialized", os != null && Hibernate.isInitialized( os ) && os.size() == 1 ); session.close(); destroyTestBaseData(); } public void testProjectionQueries() throws Exception { createTestBaseData(); Session session = openSession(); List results = session.createQuery( "select an.mother.id, max(an.bodyWeight) from Animal an group by an.mother.id" ).list(); // mysql returns nulls in this group by assertEquals( "Incorrect result size", 2, results.size() ); assertTrue( "Incorrect return type", results.get( 0 ) instanceof Object[] ); assertEquals( "Incorrect return dimensions", 2, ( ( Object[] ) results.get( 0 ) ).length ); session.close(); destroyTestBaseData(); } public void testStandardFunctions() throws Exception { Session session = openSession(); Transaction t = session.beginTransaction(); Product p = new Product(); p.setDescription("a product"); p.setPrice( new BigDecimal(1.0) ); p.setProductId("abc123"); session.persist(p); Object[] result = (Object[]) session .createQuery("select current_time(), current_date(), current_timestamp() from Product") .uniqueResult(); assertTrue( result[0] instanceof Time ); assertTrue( result[1] instanceof Date ); assertTrue( result[2] instanceof Timestamp ); assertNotNull( result[0] ); assertNotNull( result[1] ); assertNotNull( result[2] ); session.delete(p); t.commit(); session.close(); } public void testDynamicInstantiationQueries() throws Exception { createTestBaseData(); Session session = openSession(); List results = session.createQuery( "select new Animal(an.description, an.bodyWeight) from Animal an" ).list(); assertEquals( "Incorrect result size", 2, results.size() ); assertClassAssignability( results.get( 0 ).getClass(), Animal.class ); Iterator iter = session.createQuery( "select new Animal(an.description, an.bodyWeight) from Animal an" ).iterate(); assertTrue( "Incorrect result size", iter.hasNext() ); assertTrue( "Incorrect return type", iter.next() instanceof Animal ); results = session.createQuery( "select new list(an.description, an.bodyWeight) from Animal an" ).list(); assertEquals( "Incorrect result size", 2, results.size() ); assertTrue( "Incorrect return type", results.get( 0 ) instanceof List ); assertEquals( "Incorrect return type", ( (List) results.get( 0 ) ).size(), 2 ); results = session.createQuery( "select new list(an.description, an.bodyWeight) from Animal an" ).list(); assertEquals( "Incorrect result size", 2, results.size() ); assertTrue( "Incorrect return type", results.get( 0 ) instanceof List ); assertEquals( "Incorrect return type", ( (List) results.get( 0 ) ).size(), 2 ); iter = session.createQuery( "select new list(an.description, an.bodyWeight) from Animal an" ).iterate(); assertTrue( "Incorrect result size", iter.hasNext() ); Object obj = iter.next(); assertTrue( "Incorrect return type", obj instanceof List ); assertEquals( "Incorrect return type", ( (List) obj ).size(), 2 ); iter = ((org.hibernate.classic.Session)session).iterate( "select new list(an.description, an.bodyWeight) from Animal an" ); assertTrue( "Incorrect result size", iter.hasNext() ); obj = iter.next(); assertTrue( "Incorrect return type", obj instanceof List ); assertEquals( "Incorrect return type", ( (List) obj ).size(), 2 ); results = session.createQuery( "select new map(an.description, an.bodyWeight) from Animal an" ).list(); assertEquals( "Incorrect result size", 2, results.size() ); assertTrue( "Incorrect return type", results.get( 0 ) instanceof Map ); assertEquals( "Incorrect return type", ( (Map) results.get( 0 ) ).size(), 2 ); assertTrue( ( (Map) results.get( 0 ) ).containsKey("0") ); assertTrue( ( (Map) results.get( 0 ) ).containsKey("1") ); results = session.createQuery( "select new map(an.description as descr, an.bodyWeight as bw) from Animal an" ).list(); assertEquals( "Incorrect result size", 2, results.size() ); assertTrue( "Incorrect return type", results.get( 0 ) instanceof Map ); assertEquals( "Incorrect return type", ( (Map) results.get( 0 ) ).size(), 2 ); assertTrue( ( (Map) results.get( 0 ) ).containsKey("descr") ); assertTrue( ( (Map) results.get( 0 ) ).containsKey("bw") ); iter = session.createQuery( "select new map(an.description, an.bodyWeight) from Animal an" ).iterate(); assertTrue( "Incorrect result size", iter.hasNext() ); obj = iter.next(); assertTrue( "Incorrect return type", obj instanceof Map ); assertEquals( "Incorrect return type", ( (Map) obj ).size(), 2 ); ScrollableResults sr = session.createQuery( "select new map(an.description, an.bodyWeight) from Animal an" ).scroll(); assertTrue( "Incorrect result size", sr.next() ); obj = sr.get(0); assertTrue( "Incorrect return type", obj instanceof Map ); assertEquals( "Incorrect return type", ( (Map) obj ).size(), 2 ); sr.close(); sr = session.createQuery( "select new Animal(an.description, an.bodyWeight) from Animal an" ).scroll(); assertTrue( "Incorrect result size", sr.next() ); assertTrue( "Incorrect return type", sr.get(0) instanceof Animal ); sr.close(); // caching... QueryStatistics stats = getSessions().getStatistics().getQueryStatistics( "select new Animal(an.description, an.bodyWeight) from Animal an" ); results = session.createQuery( "select new Animal(an.description, an.bodyWeight) from Animal an" ) .setCacheable( true ) .list(); assertEquals( "incorrect result size", 2, results.size() ); assertClassAssignability( Animal.class, results.get( 0 ).getClass() ); long initCacheHits = stats.getCacheHitCount(); results = session.createQuery( "select new Animal(an.description, an.bodyWeight) from Animal an" ) .setCacheable( true ) .list(); assertEquals( "dynamic intantiation query not served from cache", initCacheHits + 1, stats.getCacheHitCount() ); assertEquals( "incorrect result size", 2, results.size() ); assertClassAssignability( Animal.class, results.get( 0 ).getClass() ); session.close(); destroyTestBaseData(); } public void testIllegalMixedTransformerQueries() { Session session = openSession(); try { getSelectNewQuery( session ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list(); fail("'select new' together with a resulttransformer should result in error!"); } catch(QueryException he) { assertTrue(he.getMessage().indexOf("ResultTransformer")==0); } try { getSelectNewQuery( session ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).iterate(); fail("'select new' together with a resulttransformer should result in error!"); } catch(HibernateException he) { assertTrue(he.getMessage().indexOf("ResultTransformer")==0); } try { getSelectNewQuery( session ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).scroll(); fail("'select new' together with a resulttransformer should result in error!"); } catch(HibernateException he) { assertTrue(he.getMessage().indexOf("ResultTransformer")==0); } session.close(); } private Query getSelectNewQuery(Session session) { return session.createQuery( "select new Animal(an.description, an.bodyWeight) from Animal an" ); } public void testResultTransformerScalarQueries() throws Exception { createTestBaseData(); String query = "select an.description as description, an.bodyWeight as bodyWeight from Animal an order by bodyWeight desc"; Session session = openSession(); List results = session.createQuery( query ) .setResultTransformer(Transformers.aliasToBean(Animal.class)).list(); assertEquals( "Incorrect result size", results.size(), 2 ); assertTrue( "Incorrect return type", results.get(0) instanceof Animal ); Animal firstAnimal = (Animal) results.get(0); Animal secondAnimal = (Animal) results.get(1); assertEquals("Mammal #1", firstAnimal.getDescription()); assertEquals("Mammal #2", secondAnimal.getDescription()); assertFalse(session.contains(firstAnimal)); session.close(); session = openSession(); Iterator iter = session.createQuery( query ) .setResultTransformer(Transformers.aliasToBean(Animal.class)).iterate(); assertTrue( "Incorrect result size", iter.hasNext() ); assertTrue( "Incorrect return type", iter.next() instanceof Animal ); session.close(); session = openSession(); ScrollableResults sr = session.createQuery( query ) .setResultTransformer(Transformers.aliasToBean(Animal.class)).scroll(); assertTrue( "Incorrect result size", sr.next() ); assertTrue( "Incorrect return type", sr.get(0) instanceof Animal ); assertFalse(session.contains(sr.get(0))); sr.close(); session.close(); session = openSession(); results = session.createQuery( "select a from Animal a, Animal b order by a.id" ) .setResultTransformer( DistinctRootEntityResultTransformer.INSTANCE ) .list(); assertEquals( "Incorrect result size", 2, results.size()); assertTrue( "Incorrect return type", results.get(0) instanceof Animal ); firstAnimal = (Animal) results.get(0); secondAnimal = (Animal) results.get(1); assertEquals("Mammal #1", firstAnimal.getDescription()); assertEquals("Mammal #2", secondAnimal.getDescription()); session.close(); destroyTestBaseData(); } public void testResultTransformerEntityQueries() throws Exception { createTestBaseData(); String query = "select an as an from Animal an order by bodyWeight desc"; Session session = openSession(); List results = session.createQuery( query ) .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list(); assertEquals( "Incorrect result size", results.size(), 2 ); assertTrue( "Incorrect return type", results.get(0) instanceof Map ); Map map = ((Map) results.get(0)); assertEquals(1, map.size()); Animal firstAnimal = (Animal) map.get("an"); map = ((Map) results.get(1)); Animal secondAnimal = (Animal) map.get("an"); assertEquals("Mammal #1", firstAnimal
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -