===== Native SQL Queries in Hibernate ===== In Hibernate können mit HQL und SQL direkt Abfragen auf die Datenbank formuliert werden. ===Beispiele:=== Einfaches SQL Beispiel mit Bindvariablen Verwendung und Blätterfunktion. Das Ergebnis wird in die Entity Klasse Emp transformiert. query = session.createSQLQuery("select * from EMP where EMPNO > :ID").addEntity(Emp.class); query.setDouble("ID", 10000); query.setCacheable(true); query.setFirstResult(10); query.setMaxResults(20); emps = (List)query.list(); for (Emp e : emps) { e.toString(); } System.out.println("----------------------------------"); Namen und Datentypen der Ergebnis Spalten setzen, Bind Variable übergeben und Werte ausgeben: // SQL Query mit Verwendung mit AddScalar // vor Hibernate 4 Hibernate.STRING => StringType.INSTANCE query = session.createSQLQuery("select * from EMP where EMPNO > :ID") .addScalar("EMPNO", IntegerType.INSTANCE) .addScalar("ENAME",StringType.INSTANCE) .addScalar("JOB",StringType.INSTANCE) .addScalar("MGR",FloatType.INSTANCE) .addScalar("HIREDATE",DateType.INSTANCE) .addScalar("SAL",FloatType.INSTANCE) .addScalar("COMM",FloatType.INSTANCE) .addScalar("DEPTNO",IntegerType.INSTANCE); query.setDouble("ID", 10000); query.setCacheable(true); List qemps = (List)query.list(); System.out.println("----------------------------------"); System.out.println("Count of qemps :: " + qemps.size()); Iterator iterator = qemps.iterator(); System.out.println("Emp Id \t Name \t\t\t Hiredate"); while (iterator.hasNext()) { Object[] obj = (Object[])iterator.next(); Integer empno = (Integer)obj[0]; System.out.print(empno); String ename = (String)obj[1]; System.out.print("\t " + ename); Date hiredate = (Date)obj[4]; System.out.print("\t \t " + hiredate.toString()); System.out.println(); } System.out.println("----------------------------------"); Wert über eine Map ausgeben: query = session.createSQLQuery("select * from EMP where EMPNO > :ID") .addScalar("EMPNO", IntegerType.INSTANCE) .addScalar("ENAME",StringType.INSTANCE) .addScalar("JOB",StringType.INSTANCE) .addScalar("MGR",FloatType.INSTANCE) .addScalar("HIREDATE",DateType.INSTANCE) .addScalar("SAL",FloatType.INSTANCE) .addScalar("COMM",FloatType.INSTANCE) .addScalar("DEPTNO",IntegerType.INSTANCE); query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); query.setDouble("ID", 10000); query.setCacheable(true); List data = query.list(); for (Object o : data) { Map row = (Map)o; System.out.print("Emp Name: " + row.get("ENAME")); System.out.println(", Salary: " + row.get("SAL")); } System.out.println("----------------------------------"); Ergebnis einer eigenen Klassen zuweisen. Diese Klasse muss keine Enity Klasse sein, aber die get und set Methoden müssen 1zu1 mit den Spaltennamen des Resultsets des Ergebnisses übereinstimmen: query = session.createSQLQuery("select e.ename, e.hiredate, d.dname, d.loc from emp e, dept d where e.deptno=d.deptno and e.empno > 10000") .addScalar("ename") .addScalar("hiredate") .addScalar("dname") .addScalar("loc") .setResultTransformer(Transformers.aliasToBean(EmpDept.class)); query.setCacheable(false); List empDepts = (List)query.list(); System.out.println("----------------------------------"); System.out.println("Count of Emps :: " + empDepts.size()); System.out.println("----------------------------------"); for (EmpDept e : empDepts) { System.out.println(e.toString()); } ==== Quellen ==== * http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch13.html#d5e3663 * http://www.tutorialspoint.com/hibernate/hibernate_native_sql.htm * http://relation.to/2133.lace * http://jonathanhui.com/hibernate-session-api * http://www.aviyehuda.com/blog/2009/12/29/hibernate-lesson2-queries/ * http://levelup.lishman.com/hibernate/hql/joins.php * http://www.javalobby.org/articles/hibernate-query-101/ * http://www.roseindia.net/hibernate/examples/criteria/hibernate-criteria-join-api.html * http://www.roseindia.net/hibernate/examples/criteria/hibernate-criteria.html * http://stackoverflow.com/questions/10829197/how-to-return-object-type-instead-of-listobject-in-hibernate * http://www.tutorialspoint.com/hibernate/hibernate_native_sql.htm Sehr gutes Hibernate Tutorial: http://javabrains.koushik.org/p/hibernate.html Über den Hibernate Cache: http://www.codecentric.de/kompetenzen/publikationen/ === Migration von Hibernate 3 nach 4 === * http://www.javacraft.org/2012/03/migrate-to-hibernate-4-ehcache.html