Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:java_hibernate_sql_native

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
prog:java_hibernate_sql_native [2013/04/22 12:25]
gpipperr
prog:java_hibernate_sql_native [2013/04/22 12:27] (aktuell)
gpipperr [Quellen]
Zeile 1: Zeile 1:
 +===== 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.
 +
 +<code java>
 +            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<Emp>)query.list();
 +
 +            for (Emp e : emps) {
 +                e.toString();
 +            }
 +            System.out.println("----------------------------------");
 +</code>
 +
 +
 +Namen und Datentypen der Ergebnis Spalten setzen, Bind Variable übergeben und Werte ausgeben:
 +
 +<code java>
 +
 +            // 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<Object> qemps = (List<Object>)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("----------------------------------");
 +</code>
 +
 +
 +Wert über eine Map ausgeben:
 +
 +
 +<code java>
 +
 +            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("----------------------------------");
 +</code>
 +
 +
 +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:
 +
 +<code java>
 +                
 +
 +            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<EmpDept> empDepts = (List<EmpDept>)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());
 +            }
 +</code>
 +
 +==== 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
"Autor: Gunther Pipperr"
prog/java_hibernate_sql_native.txt · Zuletzt geändert: 2013/04/22 12:27 von gpipperr