Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:java_hibernate_sql_native

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<Emp>)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<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("----------------------------------");

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<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());
            }

Quellen

Migration von Hibernate 3 nach 4

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
prog/java_hibernate_sql_native.txt · Zuletzt geändert: 2013/04/22 12:27 von gpipperr