Lenguaje de consulta de Hibernate

Slides:



Advertisements
Presentaciones similares
Fundamentos de Base de Datos
Advertisements

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
JEE Entity Enterprise Beans Herencia. 2009Ing. de Sistemas II2 Herencia y Polimorfismo en Entity Beans Los Entity Beans son clases Java comunes que soportan.
Las aplicaciones requieren datos persistentes
Acceso a Bases de Datos con Java
SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Introducción Lenguaje de manipulación de datos (Data Manipulation Language) Permite a los usuarios llevar a cabo las tareas de consulta o manipulación.
integridad referencial
BASE DE DATOS OBJETO RELACIONAL
Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: SELECT Ing. Alfonso Vicente, PMP
Unidad IV Objetivo de la Unidad:
Mejoras a la Cláusula GROUP BY
Julio Pacheco SQL SERVER 2005 XML APRENDIENDO CON EJEMPLOS.
IBD Clase 15.
Características Objeto Relacionales en Oracle
Oracle, orientado a objetos
JAVA Persistence API (JPA)
Unidad 3 Lenguaje SQL Contenidos Que es SQL ? Estructura de SQL
Marzo 2007 Lenguajes Visuales Clase III.
OPERACIONES DE RECUPERACIÓN. WHERE ciudad =‘Las Palmas’; de los suministradores Obtener el código y la situación de Las Palmas SELECT sn, situacion FROM.
Tema 3 J2EE Java Database Connectivity Temas Selectos de Cómputo Grupo 912.
PL/SQL Francisco Moreno Universidad Nacional.
SQL.
Colecciones.
Especialista en Business Intelligence Integration Services SSIS Transformaciones (Parte 2) Microsoft SQL Server 2008 R2 Suscribase a
Lenguaje SQL (Structured Query Language)
SQL Básico Prof. Nelliud D. Torres.
SQL el Structured Query Language no es mas que un lenguaje estándar de comunicación con bases de datos.
Subconsultas Avanzadas
6 Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Visualización de Datos de Varias Tablas Utilizando Uniones.
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
ESTRUCTURA DE DATOS EN JAVA
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 6 Subconsultas.
© 2010 DUOC Sede Antonio Varas. Todos los Derechos Reservados.
Herramientas de polimorfismo y herencia en C++
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
IBD CLASE 15. SQL Lenguaje de Consultas Estruturado (SQL) ◦Lenguaje de trabajo estándard para modelo relacional ◦Componentes ◦DDL: Data Definition Language.
CAPITULO 4 Despliegue de Datos Desde Múltiples Tablas
Frameworks de Persistencia Java Prof. Ing. Esteban Ramírez
Programación en Visual Basic Lección #8: SQL Por Antonio F. Huertas.
CONSULTAS SENCILLAS A LA BASE DE DATOS
Autora: Francisca Montañez Muñoz
Consultas SQL (Base de Datos)
Bases de Datos Sql.
PROCEDIMIENTOS ALMACENADOS Es una consulta almacenada en la base de datos en un servidor. Los P.A. Mejoran el Rendimiento Disminuyen el tráfico. Los P.A.
Más ejemplos en SQL Francisco Moreno. S sn snombre situacion ciudad S1 Salazar 20 Londres S2 Jaramillo 10 París S3 Bernal30 París S4 Caicedo 20 Londres.
Curso de Java y Aplicaciones Web Facultad Politécnica – U.N.A. Ing. Esteban Ramírez Persistencia Java.
LENGUAJE ESTRUCTURADO DE CONSULTAS
LINQ (Language-Integrated Query) Gabriel Espinoza Erices 2012 – 03 – 15.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Prof. De Bases de Datos: Lcdo. Luis Peña. El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query.
 La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos.
Consultas SQL. SQL SQL es un lenguaje de consulta estructurado (Structured Query Languague). Se utiliza para: Eliminar Modificar Consultar La base de.
JOIN EN MYSQL Bueno en esta presentación mostrare cosas acerca de los usos de la sentencia JOIN en mysql , mediante esta presentación planeo mostrar los.
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
SQL es el lenguaje de comunicación entre el programa cliente y programa servidor; Oracle es un programa servidor, en el que está la base de datos propiamente.
Unidad 6. Tema 4. Lenguaje de consultas SQL
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
DLM Transact SQL Sesión II Recuperación de información.
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
DML Transact SQL Sesión VI Trabajando con subconsultas.
DML Transact SQL Sesión V Consultando múltiples tablas.
Fundamentos de Bases de Datos
DML Transact SQL Sesión III Agrupando y resumiendo información.
Selección Condicionada de Filas Uso de la cláusula WHERE La cláusula WHERE restringe las columnas que retorna una consulta según la condición que se imponga.
Structure Query Languaje
SQL Lenguaje de Consulta Estructurado
Transcripción de la presentación:

Lenguaje de consulta de Hibernate HQL Lenguaje de consulta de Hibernate 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Recuperación de datos La recuperación de los datos persistidos puede realizarse: Directamente mediante el objeto Session. Generando un objeto Criteria. Utilizando la api correspondiente. Generando un objeto Query: Utilizando el lenguaje hql. Utilizando el lenguaje sql nativo. 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Load() Los métodos load() de Session proporcionan una forma de recuperar una instancia persistente si ya se conoce su identificador. load() toma un objeto clase y carga el estado dentro de un objeto recién instanciado de esa clase, en un estado persistente. Usuario usuario = new Usuario(); usuario.setCuit(cuit); … session.load(usuario, usuario.getCuit()); session.close(); Obtiene al usuario por su clave primaria. Otra forma es recuperar al objeto mediante el valor escalar de la PK: Usuario usu = (Usuario) session.load(Usuario.class, cuit); El método load() lanzará una excepción irrecuperable si no hay una fila correspondiente en la base de datos. Si no hay certeza de que existe una fila correspondiente, se debe utilizar el método get(), que devuelve nulo si no existe una fila correspondiente. Usuario usu = (Usuario) session.get(Usuario.class, cuit); 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Interfaz Query Si no se conocen los identificadores de los objetos que se están buscando, se necesita una consulta. Se representa en una instancia de org.hibernate.Query. Esta interfaz ofrece métodos para ligar parámetros, manejo del conjunto resultado, y para la ejecución de la consulta real. Un Objeto Query se crea desde el objeto Session: Query query = session.createQuery( String ); El método list() del objeto Query retorna una colección del tipo List de los objetos recuperados de la base. Query query = session.createQuery(“from Persona” ); List<Persona> list = query.list(); El argumento ‘from Persona’ representaría a la consulta sql ‘ select * from personas’ . La interfaz Query se encarga de ejecutarla y recuperar el ResultSet asociado, retornando un ArrayList de objetos tipo Persona mapeados con la tabla ‘personas’. 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Interfaz Query Una consulta se ejecuta usualmente invocando a list(). El resultado de la consulta será cargado completamente dentro de una colección en memoria. Las instancias de entidad recuperadas por una consulta se encuentran en estado persistente. Las consultas HQL y SQL nativas son representadas con una instancia de org.hibernate.Query. List<Usuario> list = session.createQuery(“from Usuario ").list(); Si las consultas devuelven muchas filas puede paginarse la cantidad devuelta. Query q = session.createQuery("from Usuario "); q.setFirstResult( desde ); q.setMaxResults( cantidadMaxima ); List<Usuario> list = q.list(); 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas iterate() La colección del tipo List que retornaría de un objeto Query, puede en algunos casos ser iterada para mayor control o selección sobre los datos recuperados. Se puede ejecutar la consulta con el método iterate(), que devuelve el iterador de la lista. Iterator ilista = session.createQuery( "select U, T from Usuario U join U.telefonos T") .iterate(); Set<Usuario> set = new HashSet<Usuario>(); while(ilista.hasNext()) { Object[] tupla = (Object[]) ilista.next(); Usuario u = (Usuario) tupla[0]; set.add(u); } 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas uniqueResult() Cuando una consulta retorna un único resultado (sea un escalar o un objeto) no sería práctico retornarla en una interfaz List o recuperarla mediante Iterator. Si se conoce que devuelve un solo objeto se debiera utilizar el método uniqueResult(). Query q = session.createQuery("from Usuario "); q.setFirstResult( desde ); q.setMaxResults( 1 ); Usuario usuario = q.uniqueResult(); o tambien: Usuario usuario = session.createQuery("from Usuario ") .setFirstResult( desde ) .setMaxResults( 1 ); .uniqueResult(); 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas HQL Hibernate soporta un lenguaje de consulta orientado a objetos (HQL). Estructuralmente similar a SQL, con la gran diferencia que se referencian objetos y propiedades de éstos y no tablas y columnas como en el lenguaje sql. Las consultas HQL son representadas con una instancia de Query. Presenta distintas cláusulas que permiten definir una consulta: Select From Where Group by Having Order by 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Cláusula from Cláusula donde se indica explícitamente los objetos que serán recuperados por medio de la consulta: // Retorna todas las instancias de la clase Usuario Query q = session.createQuery("from Usuario"); // Para referirse  en otras partes de la consulta, se necesita asignar un alias. Query q = session.createQuery("from Cuenta cta"); // Pueden aparecer múltiples clases, lo que causa un producto cartesiano o una unión cruzada (cross join). Query q = session.createQuery("from Formula f, Parametro p"); 2011 Aplicaciones Distribuidas

Asociaciones y uniones - joins Se utiliza join para recuperar entidades asociadas o a elementos de una colección de valores. Pueden ser del tipo: inner join outer join left outer join right outer join full outer join Ejemplos: from Cuenta cta join cta.usuarios from Usuario usu join usu.cuentas ctas left join usu.telefonos fonos 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Cláusula select La cláusula select determina qué objetos y propiedades devolver en el conjunto de resultados de la consulta: // Retorna los usuarios que poseen teléfono select usu from Usuario usu join usu.telefonos // Retorna las cuentas de los usuarios. select usu.cuentas from Usuario usu join usu.cuentas // Retorna tuplas como arreglos de Object - List<Object[]>. select usu, cuentas from Usuario usu join usu.cuentas cuentas 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Cláusula where Condiciona por cualquier valor de las propiedades de los objetos indicados en la cláusula from from Usuario where nombre = ‘juan’ from Usuario usu where usu.nombre = ‘juan’ from Usuario usu where usu.nombre like ’%a%’ from Usuario usu where usu.domicilio is not null and usu.domicilio.cp in (1000, 1833, 1400) from Usuario usu, Usuario u where usu.domicilio = u.domicilio from Usuario usu where usu.nombre between ’A’ and ‘B’ from Usuario usu where size (usu.cuentas) > 2 and usu.cuit like ’%0’ from Usuario usu where exists usu.telefonos from Usuario usu join usu.cuentas ctas where ctas.saldo > 1000 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas parámetros Los objetos Query proporcionan parámetros para enlazar valores en la consulta. Al contrario de JDBC, Hibernate numera los parámetros desde cero. Los parámetros con nombre son identificadores de la forma :name en la cadena de la consulta. Las ventajas de los parámetros con nombre son las siguientes: los parámetros con nombre son insensibles al orden en que aparecen en la cadena de consulta pueden aparecer múltiples veces en la misma petición son auto-documentados Query q = session.createQuery( "select usu.cuentas from Usuario usu where usu.ciut = ?") .setString(0,usuario.getCuit()); "select usu.cuentas from Usuario usu where usu.cuit = :cuit") .setString(“cuit”, usuario.getCuit()); 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Lista de parámetros Los parámetros pueden componer una lista de valores public List<Object[]> consulta (List<String> lstnombres) { Session session = sf.openSession(); List<Object[]> lista = session.createQuery( "select usu, ctas from Usuario usu left join U.cuentas ctas " + "where usu.nombre in(:nombres)") .setParameterList("nombres", lstnombres) .list(); session.close(); return lista; 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Cláusula group by Una consulta que retorna valores agregados se puede agrupar por cualquier propiedad de una clase retornada o componentes: select tel.area, count(tel.numero) from Telefono tel group by tel.area having tel.area <> ‘351’ select usu.cuit, sum(c.saldo) as saldoTotal from Usuario usu join usu.cuentas c group by usu.cuit order by 2 desc Las funciones SQL y las funciones de agregación SQL están permitidas en las cláusulas having y order by, si están soportadas por la base de datos subyacente. 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Cláusula order by Ordena la consulta conforme a una lista de propiedades. select usu from Usuario usu order by usu.nombre select usu.cuit, usu, nombre, sum(c.saldo) as saldoTotal from Usuario usu join usu.cuentas c group by usu.cuit, usu.nombre order by sum(c.saldo) desc, usu.nombre 2011 Aplicaciones Distribuidas

Aplicaciones Distribuidas Subconsultas Si la base de datos subyacente soporta subconsultas, pueden definirse también con hibernate from Cuenta cuenta where cuenta.saldo = ( select max(cuenta.saldo) from Cuenta cuenta ) from Usuario usu where usu.cuit not in ( select u.cuit from Usuario u join u.telefonos) Si la base de datos subyacente soporta correlación, tambien pueden definirse con hibernate from Usuario usu where not exists ( from Usuario u where u.domicilio = usu.domicilio) 2011 Aplicaciones Distribuidas