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

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung 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