📄 nativesqlqueriestest.java
字号:
Person gavin = new Person("Gavin"); Employment emp = new Employment(gavin, jboss, "AU"); Serializable orgId = s.save(jboss); Serializable orgId2 = s.save(ifa); s.save(gavin); s.save(emp); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); Query namedQuery = s.getNamedQuery("AllEmploymentAsMapped"); List list = namedQuery.list(); assertEquals(1,list.size()); Employment emp2 = (Employment) list.get(0); assertEquals(emp2.getEmploymentId(), emp.getEmploymentId() ); assertEquals(emp2.getStartDate().getDate(), emp.getStartDate().getDate() ); assertEquals(emp2.getEndDate(), emp.getEndDate() ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); Query sqlQuery = s.getNamedQuery("EmploymentAndPerson"); sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); list = sqlQuery.list(); assertEquals(1,list.size() ); Object res = list.get(0); assertClassAssignability(res.getClass(),Map.class); Map m = (Map) res; assertEquals(2,m.size()); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); sqlQuery = s.getNamedQuery("organizationreturnproperty"); sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); list = sqlQuery.list(); assertEquals(2,list.size() ); m = (Map) list.get(0); assertTrue(m.containsKey("org")); assertClassAssignability(m.get("org").getClass(), Organization.class); assertTrue(m.containsKey("emp")); assertClassAssignability(m.get("emp").getClass(), Employment.class); assertEquals(2, m.size()); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); namedQuery = s.getNamedQuery("EmploymentAndPerson"); list = namedQuery.list(); assertEquals(1,list.size() ); Object[] objs = (Object[]) list.get(0); assertEquals(2, objs.length); emp2 = (Employment) objs[0]; gavin = (Person) objs[1]; s.delete(emp2); s.delete(jboss); s.delete(gavin); s.delete(ifa); t.commit(); s.close(); } /* test for native sql composite id joins which has never been implemented */ public void testCompositeIdJoinsFailureExpected() { Session s = openSession(); Transaction t = s.beginTransaction(); Person person = new Person(); person.setName( "Noob" ); Product product = new Product(); product.setProductId( new Product.ProductId() ); product.getProductId().setOrgid( "x" ); product.getProductId().setProductnumber( "1234" ); product.setName( "Hibernate 3" ); Order order = new Order(); order.setOrderId( new Order.OrderId() ); order.getOrderId().setOrdernumber( "1" ); order.getOrderId().setOrgid( "y" ); product.getOrders().add( order ); order.setProduct( product ); order.setPerson( person ); s.save( product ); s.save( order); s.save( person ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); Product p = (Product) s.createQuery( "from Product p join fetch p.orders" ).list().get(0); assertTrue(Hibernate.isInitialized( p.getOrders())); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); Object[] o = (Object[]) s.createSQLQuery( "select\r\n" + " product.orgid as {product.id.orgid}," + " product.productnumber as {product.id.productnumber}," + " {prod_orders}.orgid as orgid3_1_,\r\n" + " {prod_orders}.ordernumber as ordernum2_3_1_,\r\n" + " product.name as {product.name}," + " {prod_orders.element.*}" + /*" orders.PROD_NO as PROD4_3_1_,\r\n" + " orders.person as person3_1_,\r\n" + " orders.PROD_ORGID as PROD3_0__,\r\n" + " orders.PROD_NO as PROD4_0__,\r\n" + " orders.orgid as orgid0__,\r\n" + " orders.ordernumber as ordernum2_0__ \r\n" +*/ " from\r\n" + " Product product \r\n" + " inner join\r\n" + " TBL_ORDER {prod_orders} \r\n" + " on product.orgid={prod_orders}.PROD_ORGID \r\n" + " and product.productnumber={prod_orders}.PROD_NO" ) .addEntity( "product", Product.class ) .addJoin( "prod_orders", "product.orders" ) .list().get(0); p = (Product) o[0]; assertTrue(Hibernate.isInitialized( p.getOrders() )); assertNotNull(p.getOrders().iterator().next()); t.commit(); s.close(); } public void testAutoDetectAliasing() { Session s = openSession(); Transaction t = s.beginTransaction(); Organization ifa = new Organization("IFA"); Organization jboss = new Organization("JBoss"); Person gavin = new Person("Gavin"); Employment emp = new Employment(gavin, jboss, "AU"); Serializable orgId = s.save(jboss); Serializable orgId2 = s.save(ifa); s.save(gavin); s.save(emp); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); List list = s.createSQLQuery( getEmploymentSQL() ) .addEntity( Employment.class.getName() ) .list(); assertEquals( 1,list.size() ); Employment emp2 = (Employment) list.get(0); assertEquals(emp2.getEmploymentId(), emp.getEmploymentId() ); assertEquals(emp2.getStartDate().getDate(), emp.getStartDate().getDate() ); assertEquals(emp2.getEndDate(), emp.getEndDate() ); s.clear(); list = s.createSQLQuery( getEmploymentSQL() ) .addEntity( Employment.class.getName() ) .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP) .list(); assertEquals( 1,list.size() ); Map m = (Map) list.get(0); assertTrue(m.containsKey("Employment")); assertEquals(1,m.size()); list = s.createSQLQuery(getEmploymentSQL()).list(); assertEquals(1, list.size()); Object[] o = (Object[]) list.get(0); assertEquals(8, o.length); list = s.createSQLQuery( getEmploymentSQL() ).setResultTransformer( new UpperCasedAliasToEntityMapResultTransformer() ).list(); assertEquals(1, list.size()); m = (Map) list.get(0); assertTrue(m.containsKey("EMPID")); assertTrue(m.containsKey("VALUE")); assertTrue(m.containsKey("ENDDATE")); assertEquals(8, m.size()); list = s.createSQLQuery( getEmploymentSQLMixedScalarEntity() ).addScalar( "employerid" ).addEntity( Employment.class ).list(); assertEquals(1, list.size()); o = (Object[]) list.get(0); assertEquals(2, o.length); assertClassAssignability( o[0].getClass(), Number.class); assertClassAssignability( o[1].getClass(), Employment.class); Query queryWithCollection = s.getNamedQuery("organizationEmploymentsExplicitAliases"); queryWithCollection.setLong("id", jboss.getId() ); list = queryWithCollection.list(); assertEquals(list.size(),1); s.clear(); list = s.createSQLQuery( getOrganizationJoinEmploymentSQL() ) .addEntity( "org", Organization.class ) .addJoin( "emp", "org.employments" ) .list(); assertEquals( 2,list.size() ); s.clear(); list = s.createSQLQuery( getOrganizationFetchJoinEmploymentSQL() ) .addEntity( "org", Organization.class ) .addJoin( "emp", "org.employments" ) .list(); assertEquals( 2,list.size() ); s.clear(); // TODO : why twice? s.getNamedQuery( "organizationreturnproperty" ).list(); list = s.getNamedQuery( "organizationreturnproperty" ).list(); assertEquals( 2,list.size() ); s.clear(); list = s.getNamedQuery( "organizationautodetect" ).list(); assertEquals( 2,list.size() ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); s.delete(emp2); s.delete(jboss); s.delete(gavin); s.delete(ifa); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); Dimension dim = new Dimension( 3, Integer.MAX_VALUE ); s.save( dim ); list = s.createSQLQuery( "select d_len * d_width as surface, d_len * d_width * 10 as volume from Dimension" ).list(); s.delete( dim ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); SpaceShip enterprise = new SpaceShip(); enterprise.setModel( "USS" ); enterprise.setName( "Entreprise" ); enterprise.setSpeed( 50d ); Dimension d = new Dimension(45, 10); enterprise.setDimensions( d ); s.save( enterprise ); Object[] result = (Object[]) s.getNamedQuery( "spaceship" ).uniqueResult(); enterprise = ( SpaceShip ) result[0]; assertTrue(50d == enterprise.getSpeed() ); assertTrue( 450d == extractDoubleValue( result[1] ) ); assertTrue( 4500d == extractDoubleValue( result[2] ) ); s.delete( enterprise ); t.commit(); s.close(); } public void testMixAndMatchEntityScalar() { Session s = openSession(); Transaction t = s.beginTransaction(); Speech speech = new Speech(); speech.setLength( new Double( 23d ) ); speech.setName( "Mine" ); s.persist( speech ); s.flush(); s.clear(); List l = s.createSQLQuery( "select name, id, flength, name as scalarName from Speech" ) .setResultSetMapping( "speech" ) .list(); assertEquals( l.size(), 1 ); t.rollback(); s.close(); } private double extractDoubleValue(Object value) { if ( value instanceof BigInteger ) { return ( ( BigInteger ) value ).doubleValue(); } else if ( value instanceof BigDecimal ) { return ( ( BigDecimal ) value ).doubleValue(); } else { return Double.valueOf( value.toString() ).doubleValue(); } } private static class UpperCasedAliasToEntityMapResultTransformer extends AliasToEntityMapResultTransformer { public Object transformTuple(Object[] tuple, String[] aliases) { String[] ucAliases = new String[aliases.length]; for ( int i = 0; i < aliases.length; i++ ) { ucAliases[i] = aliases[i].toUpperCase(); } return super.transformTuple( tuple, ucAliases ); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -