Este documento describe diferentes técnicas de mapeo en Hibernate/JPA como @Embedded, @Embeddable, modos de identidad como @Id, @GeneratedValue, @SequenceGenerator, modos de locking como @Version, herencia mediante @Inheritance, relaciones polimórficas, batch processing, servicios, transitividad (cascades), caching, validaciones con Hibernate Validator y Envers para auditoría. Explica recomendaciones sobre performance y también introduce conceptos como multi-tenancy.
Este documento introduce Hibernate, un framework para mapear objetos a bases de datos relacionales. Explica los conceptos básicos de ORM y cómo configurar Hibernate para realizar consultas, crear y modificar datos, y establecer relaciones entre entidades. También cubre temas avanzados como herencia, generación de SQL y estrategias de caché.
El documento describe la API de persistencia Java Persistence (JPA). JPA es un estándar ORM que permite mapear objetos Java a tablas de una base de datos relacional de una manera declarativa mediante anotaciones. JPA proporciona una capa de abstracción sobre tecnologías de acceso a datos como JDBC para facilitar la persistencia de datos.
El documento describe el mapeo objeto-relacional (ORM) y el framework Hibernate. Explica las ventajas de usar ORM, como trabajar con objetos en lugar de filas de datos. También describe los componentes clave de Hibernate como las clases, los archivos XML de mapeo y de configuración, y cómo crear, leer, actualizar y eliminar objetos de la base de datos.
Una introducción a los conceptos y las características básicas de la API de persistencia para la plataforma Java, desde un punto de vista neutral (sin una preferencia por algún proveedor de persistencia en particular) comenzando desde el planteo de la necesidad de un ORM, y pasando luego por conceptos básicos como las relaciones entre entidades, ciclo de vida de las mismas, JPQL, criteria API.
Este documento proporciona una introducción a Hibernate, un framework de persistencia de objetos para Java. Explica que Hibernate mapea objetos Java a tablas de base de datos de forma transparente mediante el uso de reflexión. También describe los principales componentes de Hibernate como las sesiones, factorías de sesiones, objetos persistentes y transacciones. Finalmente, incluye diagramas que ilustran la arquitectura general de Hibernate y las relaciones entre sus distintos elementos.
JPA (Java Persistence API) es un modelo de persistencia para mapear objetos Java a bases de datos relacionales usando anotaciones en lugar de archivos XML. Las principales anotaciones incluyen @Entity para marcar clases como entidades, @Id para identificar la clave primaria de una entidad, y @Basic, @OneToMany, @OneToOne, @ManyToOne y @ManyToMany para especificar atributos y relaciones. Un JPA Controller maneja las operaciones CRUD para cada clase de entidad.
Este documento introduce el framework Java Persistence API (JPA), incluyendo su arquitectura, ciclo de vida de entidades, implementaciones, y cómo funciona. JPA permite almacenar datos de objetos Java en una base de datos relacional de manera transparente mediante anotaciones y consultas JPQL similares a SQL.
Este documento introduce Hibernate, un framework para mapear objetos a bases de datos relacionales. Explica los conceptos básicos de ORM y cómo configurar Hibernate para realizar consultas, crear y modificar datos, y establecer relaciones entre entidades. También cubre temas avanzados como herencia, generación de SQL y estrategias de caché.
El documento describe la API de persistencia Java Persistence (JPA). JPA es un estándar ORM que permite mapear objetos Java a tablas de una base de datos relacional de una manera declarativa mediante anotaciones. JPA proporciona una capa de abstracción sobre tecnologías de acceso a datos como JDBC para facilitar la persistencia de datos.
El documento describe el mapeo objeto-relacional (ORM) y el framework Hibernate. Explica las ventajas de usar ORM, como trabajar con objetos en lugar de filas de datos. También describe los componentes clave de Hibernate como las clases, los archivos XML de mapeo y de configuración, y cómo crear, leer, actualizar y eliminar objetos de la base de datos.
Una introducción a los conceptos y las características básicas de la API de persistencia para la plataforma Java, desde un punto de vista neutral (sin una preferencia por algún proveedor de persistencia en particular) comenzando desde el planteo de la necesidad de un ORM, y pasando luego por conceptos básicos como las relaciones entre entidades, ciclo de vida de las mismas, JPQL, criteria API.
Este documento proporciona una introducción a Hibernate, un framework de persistencia de objetos para Java. Explica que Hibernate mapea objetos Java a tablas de base de datos de forma transparente mediante el uso de reflexión. También describe los principales componentes de Hibernate como las sesiones, factorías de sesiones, objetos persistentes y transacciones. Finalmente, incluye diagramas que ilustran la arquitectura general de Hibernate y las relaciones entre sus distintos elementos.
JPA (Java Persistence API) es un modelo de persistencia para mapear objetos Java a bases de datos relacionales usando anotaciones en lugar de archivos XML. Las principales anotaciones incluyen @Entity para marcar clases como entidades, @Id para identificar la clave primaria de una entidad, y @Basic, @OneToMany, @OneToOne, @ManyToOne y @ManyToMany para especificar atributos y relaciones. Un JPA Controller maneja las operaciones CRUD para cada clase de entidad.
Este documento introduce el framework Java Persistence API (JPA), incluyendo su arquitectura, ciclo de vida de entidades, implementaciones, y cómo funciona. JPA permite almacenar datos de objetos Java en una base de datos relacional de manera transparente mediante anotaciones y consultas JPQL similares a SQL.
Introducción a Doctrine 2 ORM.
Una introducción y uso básico de Doctrine 2 ORM en PHP sin utilizar frameworks, a través de un proyecto sencillo usado como ejemplo.
El codigo PHP del proyecto se puede descargar de su repositorio de Github: (https://github.com/gonfert/cine.git)
Presentación realizada para la X Symfony Zaragoza
Este documento presenta una introducción a Hibernate, un framework para mapeo objeto-relacional. Explica cómo Hibernate mapea elementos de una base de datos relacional a objetos de una aplicación, haciendo la aplicación independiente del lenguaje SQL y del sistema de gestión de bases de datos. También describe cómo Hibernate se puede utilizar como capa de persistencia en una arquitectura MVC para aplicaciones web. Finalmente, proporciona una guía paso a paso para crear una primera aplicación simple con Hibernate.
La serialización en Java permite convertir objetos en una representación binaria para poder almacenarlos o transmitirlos. Implementar la interfaz Serializable es suficiente para serializar la mayoría de objetos. Los objetos compuestos también se pueden serializar siempre que todos sus componentes sean serializables. Es posible extender la serialización para personalizar la conversión. La serialización tiene limitaciones como sufrir problemas ante cambios en las clases o no ser adecuada para grandes volúmenes de datos.
El documento describe la API de persistencia de Java (JPA), la cual proporciona un estándar para gestionar datos relacionales en aplicaciones Java. JPA simplifica el desarrollo de la persistencia de datos mediante el mapeo de objetos a tablas de base de datos a través de anotaciones. Define conceptos como entidades, asociaciones, consultas y transacciones.
Introducción al trabajo con Java Persistence Api (JPA), conceptos básicos y ejemplo aplicado a una tabla posts con los siguientes campos: post_id, post_title, post_date, post_body utilizando netbeans
Este documento describe la persistencia de datos en archivos en Java. Explica que los datos de una aplicación pueden almacenarse de forma permanente escribiéndolos en un archivo en el disco. Luego describe las clases File y Scanner que permiten trabajar con archivos, y las clases Reader, Writer, InputStream y OutputStream que permiten la entrada y salida de datos a través de flujos. Finalmente, introduce la serialización de objetos para almacenarlos en archivos binarios.
El documento presenta una agenda sobre Spring DAO, Spring JDBC y Spring Transaction Management. Spring DAO provee una forma sencilla de interactuar con tecnologías de persistencia como JDBC, Hibernate y JDO, abstrae el manejo de excepciones y permite cambiar fácilmente entre tecnologías. Spring JDBC provee clases de soporte como JdbcTemplate y SimpleJdbcTemplate para simplificar el acceso a bases de datos. Spring Transaction Management permite configurar atributos y tipos de transacciones de forma programática o declarativa.
Tema 16 acceso a base de datos usando jpa por gioRobert Wolf
1) El documento describe el acceso a bases de datos usando JPA, una capa de software que reduce la tarea de conversión entre objetos y datos relacionales. 2) JPA mapea objetos a tablas mediante anotaciones y permite operaciones CRUD. 3) Se explican diferentes tipos de mapeo como uno a uno, muchos a uno, herencia y entidades.
Tema 9 aplicaciones de dos capas por gioRobert Wolf
Una aplicación de dos capas separa el código de la aplicación del sistema de administración de la base de datos. En Java, la API JDBC proporciona una interfaz estándar para que un cliente escrito en Java se comunique con administradores de bases de datos. La API JDBC consta de interfaces y clases que representan conexiones, sentencias SQL y resultados de consultas. Las aplicaciones de dos capas encapsulan esta funcionalidad en clases como Conexión y Tabla para establecer conexiones y ejecutar operaciones SQL de forma sencilla.
Tema 15 aplicaciones de dos capas por gioRobert Wolf
Una aplicación de dos capas separa el código de la aplicación del sistema de administración de la base de datos. En una aplicación de dos capas, el cliente contiene la interfaz de usuario y lógica del negocio, mientras que el servidor contiene un administrador de bases de datos. La API JDBC de Java proporciona una forma estándar para que un cliente Java se comunique con diferentes administradores de bases de datos a través de un protocolo.
Este documento trata sobre las bases de datos y cómo se conectan las aplicaciones Java a ellas a través del driver JDBC. Explica que JDBC es la interfaz estándar de Java para conectarse a bases de datos y no requiere descargar paquetes adicionales. Luego describe los objetos principales involucrados en el acceso a datos como Connection, Statement y ResultSet.
Los ORM permiten ver y modificar datos almacenados en bases de datos relacionales usando objetos en lugar de consultas SQL. Mapean objetos a tablas mediante asociaciones, y gestionan el proceso de conversión entre objetos y registros de la base de datos. Algunos ORM populares son Hibernate, Entity Framework, Doctrine y SQLAlchemy.
El documento habla sobre conexiones a bases de datos en Java usando JDBC y ODBC. Explica cómo configurar drivers JDBC y ODBC para acceder a diferentes bases de datos, y provee ejemplos de cómo realizar consultas, modificaciones y otras operaciones comunes en bases de datos usando JDBC.
Este documento describe conceptos relacionados con conexiones a bases de datos en Java, incluyendo JDBC, drivers, configuración de ODBC, consultas, modificaciones, prepared statements y stored procedures. Explica cómo conectarse a una base de datos, realizar consultas y modificaciones de tablas, y el uso de prepared statements y stored procedures.
Las bases de datos orientadas a objetos surgieron para trabajar con lenguajes de programación orientados a objetos como Java y C++, ya que el modelo relacional tenía limitaciones para aplicaciones más complejas. Las BDOO almacenan datos en objetos en lugar de tablas y usan conceptos como encapsulamiento, herencia y polimorfismo. También proveen una identidad única a cada objeto para referenciarlo y hacerlo persistente en la base de datos.
1. Las bases de datos objeto-relacionales (BDOR) combinan características de las bases de datos relacionales y orientadas a objetos, permitiendo al usuario definir sus propios tipos de datos complejos y métodos.
2. Oracle permite definir tipos de objetos, colecciones, y tablas anidadas, y proporciona mecanismos como identificadores únicos y referencias para representar relaciones entre objetos.
3. Los tipos definidos por el usuario pueden utilizarse para definir atributos de objetos y tablas, permit
Los atributos en C# son mecanismos que permiten agregar información declarativa a elementos de un programa como tipos, campos, métodos y propiedades. Esta información puede ser consultada en tiempo de ejecución a través de la reflexión. Existen atributos predefinidos y también se pueden definir atributos personalizados mediante clases que heredan de Attribute.
Este documento describe la Java Persistence API (JPA), incluyendo sus cuatro áreas principales, cómo mapear entidades a tablas de base de datos usando anotaciones, y diferentes tipos de relaciones entre entidades como uno-a-uno, uno-a-muchos, muchos-a-muchos. También explica cómo usar validaciones y otras anotaciones como @Transient, @Lob, @Temporal y @OrderBy.
UML es un lenguaje estándar para modelar sistemas de software que consiste en diagramas para especificar, visualizar, diseñar, construir, simular y documentar software. UML define conceptos como clases, objetos, atributos, operaciones, asociaciones y herencia para modelar el sistema. Los diagramas de UML ayudan a los desarrolladores a realizar tareas de especificación, diseño y documentación de software.
Este documento describe el uso de objetos relacionales mapeados (ORM) en Hibernate. Explica las ventajas de usar un ORM como Hibernate, como simplifica el trabajo con bases de datos relacionales al permitir el uso de objetos en lugar de filas y tablas. También describe los componentes clave de Hibernate como las clases de mapeo, la configuración y la API para realizar operaciones CRUD.
The document discusses various design patterns including Factory Method, Abstract Factory, Builder, Singleton, Adapter, Bridge, and Decorator patterns. It provides definitions and explanations of the intent, structure, participants, and sample code for implementing each pattern. The Factory Method pattern allows subclasses to determine which object to create, Abstract Factory creates families of related objects without specifying their concrete classes, and Builder separates object construction from representation. Singleton ensures only one instance, Adapter converts interfaces, Bridge decouples abstraction and implementation, and Decorator adds responsibilities dynamically. Design patterns provide reusable solutions to common programming problems.
Introducción a Doctrine 2 ORM.
Una introducción y uso básico de Doctrine 2 ORM en PHP sin utilizar frameworks, a través de un proyecto sencillo usado como ejemplo.
El codigo PHP del proyecto se puede descargar de su repositorio de Github: (https://github.com/gonfert/cine.git)
Presentación realizada para la X Symfony Zaragoza
Este documento presenta una introducción a Hibernate, un framework para mapeo objeto-relacional. Explica cómo Hibernate mapea elementos de una base de datos relacional a objetos de una aplicación, haciendo la aplicación independiente del lenguaje SQL y del sistema de gestión de bases de datos. También describe cómo Hibernate se puede utilizar como capa de persistencia en una arquitectura MVC para aplicaciones web. Finalmente, proporciona una guía paso a paso para crear una primera aplicación simple con Hibernate.
La serialización en Java permite convertir objetos en una representación binaria para poder almacenarlos o transmitirlos. Implementar la interfaz Serializable es suficiente para serializar la mayoría de objetos. Los objetos compuestos también se pueden serializar siempre que todos sus componentes sean serializables. Es posible extender la serialización para personalizar la conversión. La serialización tiene limitaciones como sufrir problemas ante cambios en las clases o no ser adecuada para grandes volúmenes de datos.
El documento describe la API de persistencia de Java (JPA), la cual proporciona un estándar para gestionar datos relacionales en aplicaciones Java. JPA simplifica el desarrollo de la persistencia de datos mediante el mapeo de objetos a tablas de base de datos a través de anotaciones. Define conceptos como entidades, asociaciones, consultas y transacciones.
Introducción al trabajo con Java Persistence Api (JPA), conceptos básicos y ejemplo aplicado a una tabla posts con los siguientes campos: post_id, post_title, post_date, post_body utilizando netbeans
Este documento describe la persistencia de datos en archivos en Java. Explica que los datos de una aplicación pueden almacenarse de forma permanente escribiéndolos en un archivo en el disco. Luego describe las clases File y Scanner que permiten trabajar con archivos, y las clases Reader, Writer, InputStream y OutputStream que permiten la entrada y salida de datos a través de flujos. Finalmente, introduce la serialización de objetos para almacenarlos en archivos binarios.
El documento presenta una agenda sobre Spring DAO, Spring JDBC y Spring Transaction Management. Spring DAO provee una forma sencilla de interactuar con tecnologías de persistencia como JDBC, Hibernate y JDO, abstrae el manejo de excepciones y permite cambiar fácilmente entre tecnologías. Spring JDBC provee clases de soporte como JdbcTemplate y SimpleJdbcTemplate para simplificar el acceso a bases de datos. Spring Transaction Management permite configurar atributos y tipos de transacciones de forma programática o declarativa.
Tema 16 acceso a base de datos usando jpa por gioRobert Wolf
1) El documento describe el acceso a bases de datos usando JPA, una capa de software que reduce la tarea de conversión entre objetos y datos relacionales. 2) JPA mapea objetos a tablas mediante anotaciones y permite operaciones CRUD. 3) Se explican diferentes tipos de mapeo como uno a uno, muchos a uno, herencia y entidades.
Tema 9 aplicaciones de dos capas por gioRobert Wolf
Una aplicación de dos capas separa el código de la aplicación del sistema de administración de la base de datos. En Java, la API JDBC proporciona una interfaz estándar para que un cliente escrito en Java se comunique con administradores de bases de datos. La API JDBC consta de interfaces y clases que representan conexiones, sentencias SQL y resultados de consultas. Las aplicaciones de dos capas encapsulan esta funcionalidad en clases como Conexión y Tabla para establecer conexiones y ejecutar operaciones SQL de forma sencilla.
Tema 15 aplicaciones de dos capas por gioRobert Wolf
Una aplicación de dos capas separa el código de la aplicación del sistema de administración de la base de datos. En una aplicación de dos capas, el cliente contiene la interfaz de usuario y lógica del negocio, mientras que el servidor contiene un administrador de bases de datos. La API JDBC de Java proporciona una forma estándar para que un cliente Java se comunique con diferentes administradores de bases de datos a través de un protocolo.
Este documento trata sobre las bases de datos y cómo se conectan las aplicaciones Java a ellas a través del driver JDBC. Explica que JDBC es la interfaz estándar de Java para conectarse a bases de datos y no requiere descargar paquetes adicionales. Luego describe los objetos principales involucrados en el acceso a datos como Connection, Statement y ResultSet.
Los ORM permiten ver y modificar datos almacenados en bases de datos relacionales usando objetos en lugar de consultas SQL. Mapean objetos a tablas mediante asociaciones, y gestionan el proceso de conversión entre objetos y registros de la base de datos. Algunos ORM populares son Hibernate, Entity Framework, Doctrine y SQLAlchemy.
El documento habla sobre conexiones a bases de datos en Java usando JDBC y ODBC. Explica cómo configurar drivers JDBC y ODBC para acceder a diferentes bases de datos, y provee ejemplos de cómo realizar consultas, modificaciones y otras operaciones comunes en bases de datos usando JDBC.
Este documento describe conceptos relacionados con conexiones a bases de datos en Java, incluyendo JDBC, drivers, configuración de ODBC, consultas, modificaciones, prepared statements y stored procedures. Explica cómo conectarse a una base de datos, realizar consultas y modificaciones de tablas, y el uso de prepared statements y stored procedures.
Las bases de datos orientadas a objetos surgieron para trabajar con lenguajes de programación orientados a objetos como Java y C++, ya que el modelo relacional tenía limitaciones para aplicaciones más complejas. Las BDOO almacenan datos en objetos en lugar de tablas y usan conceptos como encapsulamiento, herencia y polimorfismo. También proveen una identidad única a cada objeto para referenciarlo y hacerlo persistente en la base de datos.
1. Las bases de datos objeto-relacionales (BDOR) combinan características de las bases de datos relacionales y orientadas a objetos, permitiendo al usuario definir sus propios tipos de datos complejos y métodos.
2. Oracle permite definir tipos de objetos, colecciones, y tablas anidadas, y proporciona mecanismos como identificadores únicos y referencias para representar relaciones entre objetos.
3. Los tipos definidos por el usuario pueden utilizarse para definir atributos de objetos y tablas, permit
Los atributos en C# son mecanismos que permiten agregar información declarativa a elementos de un programa como tipos, campos, métodos y propiedades. Esta información puede ser consultada en tiempo de ejecución a través de la reflexión. Existen atributos predefinidos y también se pueden definir atributos personalizados mediante clases que heredan de Attribute.
Este documento describe la Java Persistence API (JPA), incluyendo sus cuatro áreas principales, cómo mapear entidades a tablas de base de datos usando anotaciones, y diferentes tipos de relaciones entre entidades como uno-a-uno, uno-a-muchos, muchos-a-muchos. También explica cómo usar validaciones y otras anotaciones como @Transient, @Lob, @Temporal y @OrderBy.
UML es un lenguaje estándar para modelar sistemas de software que consiste en diagramas para especificar, visualizar, diseñar, construir, simular y documentar software. UML define conceptos como clases, objetos, atributos, operaciones, asociaciones y herencia para modelar el sistema. Los diagramas de UML ayudan a los desarrolladores a realizar tareas de especificación, diseño y documentación de software.
Este documento describe el uso de objetos relacionales mapeados (ORM) en Hibernate. Explica las ventajas de usar un ORM como Hibernate, como simplifica el trabajo con bases de datos relacionales al permitir el uso de objetos en lugar de filas y tablas. También describe los componentes clave de Hibernate como las clases de mapeo, la configuración y la API para realizar operaciones CRUD.
The document discusses various design patterns including Factory Method, Abstract Factory, Builder, Singleton, Adapter, Bridge, and Decorator patterns. It provides definitions and explanations of the intent, structure, participants, and sample code for implementing each pattern. The Factory Method pattern allows subclasses to determine which object to create, Abstract Factory creates families of related objects without specifying their concrete classes, and Builder separates object construction from representation. Singleton ensures only one instance, Adapter converts interfaces, Bridge decouples abstraction and implementation, and Decorator adds responsibilities dynamically. Design patterns provide reusable solutions to common programming problems.
List of Jargons used in Java EE is Endless - JPA, JDBC, ORM, JNDI, EJB, JTA, DTO, VO, JAXB, JAX-RS, JAX-WS, AOP, Dependency Injection, Model 1 Architecture, Model 2 Architecture, Front Controller, Composite View, Intercepting Filter, Facade, Service Locator to name a few.
For a beginner, Java EE can be overwhelming. Objective of the course is to give a Big Picture of the Java EE. You will understand the Jargon, Specifications, Patterns used in Java EE. You will understand the basic architecture of a Java EE Application.
You will understand the evolution of Java EE Application Architecture:
Model 1 Architecture
Model 2 or MVC Architecture
Modified MVC Architecture using Front Controller
You will get an overview of Patterns used in the Java EE World - Grouped by the layer they are used in:
Front Controller
View Helper
Composite View
Context Object
Intercepting Filter
Domain Model
Facade
DTO/VO
DAO - Data Access Object
Service Activator
You will also be introduced to terminologies like JPA, JDBC, ORM, JNDI, EJB, JTA, DTO, VO, JAXB, JAX-RS, JAX-WS, AOP and Dependency Injection.
Get ready for a Roller Coaster Ride with Java EE.
The document discusses the evolution of the Java security model from its initial introduction in JDK 1.0 to address security concerns of executing untrusted code, to later refinements that introduced signing of trusted code, fine-grained access control, and integration with user authentication. It also covers security APIs available for secure coding outside the sandbox and best practices for designing code with security in mind, such as respecting the SecurityManager and following the principle of least privilege.
Introduction to JPA and Hibernate including examplesecosio GmbH
In this talk, held as part of the Web Engineering lecture series at Vienna University of Technology, we introduce the main concepts of Java Persistence API (JPA) and Hibernate.
The first part of the presentation introduces the main principles of JDBC and outlines the major drawbacks of JDBC-based implementations. We then further outline the fundamental principles behind the concept of object relation mapping (ORM) and finally introduce JPA and Hibernate.
The lecture is accompanied by practical examples, which are available on GitHub.
This document summarizes the new features of JPA 2.0 as defined in JSR 317. Key additions include expanded object-relational mappings, improved domain modeling capabilities, enhancements to the Java Persistence query language including a Criteria API, standardization of configuration hints, support for validation via JSR 303, and second level caching.
Desarrollo de Aplicaciones Web II - Sesión 07: TransaccionesDidier Granados
Una transacción es una o más sentencias que se toman como una unidad (todo termina bien o todo se aborta). Es una unidad lógica de trabajo definida para las reglas del negocio y típicamente incluye al menos una modificación de datos. Además, pasa la base de datosde un estado consistente a otro.
Este documento discute conceptos clave de Hibernate/JPA como recuperar, guardar, actualizar y eliminar entidades, y también explica diferentes tipos de relaciones como ManyToOne y OneToMany. Cubre temas como cascadas, estrategias de fetching como lazy vs eager, y cómo evitar el problema N+1 queries. El autor también menciona probar estas funcionalidades en el código de ejemplo en GitHub y discutir más temas avanzados como relaciones bidireccionales.
Este documento presenta una introducción al uso de Hibernate/JPA. Explica brevemente cómo se organizará la sesión, incluyendo ejemplos y ejercicios. También introduce conceptos clave como ORM, mapeo objeto-relacional, y cómo Hibernate implementa JPA para proporcionar persistencia de objetos. El objetivo es que los asistentes aprendan los fundamentos de Hibernate/JPA a través de la teoría y práctica interactiva.
Este documento presenta conceptos básicos de Java, incluyendo tipos de datos primitivos y complejos, operadores, estructuras de control, clases y objetos, herencia y polimorfismo. También cubre temas como encapsulamiento, constructores, métodos get y set, y el uso de la palabra clave 'this'.
Este documento introduce conceptos avanzados de modelado estructural en UML 2.0, incluyendo diferentes tipos de clasificadores como interfaces, componentes y nodos. Explica notaciones para clasificadores, elementos abstractos, multiplicidad, clases plantillas, estereotipos, relaciones de dependencia, generalización y asociación. También cubre conceptos como interfaces, roles, paquetes, instancias y diagramas de objetos.
1) El documento introduce conceptos avanzados de modelado estructural y de interacción en UML como clasificadores, interfaces, roles, paquetes, instancias, diagramas de objetos, diagramas de secuencia y diagramas de colaboración.
2) También cubre temas como estereotipos aplicados a clases y objetos, relaciones como generalización, asociación y dependencia.
3) Finalmente, introduce conceptos de modelado de comportamiento como máquinas de estado, eventos y señales.
Este documento describe los diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones, y que se representan gráficamente mediante cajas. También describe elementos clave de los diagramas de clases como atributos, operaciones, relaciones como generalización y asociación.
Este documento describe los diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones. Muestra ejemplos de cómo representar clases, atributos, operaciones, herencia y asociaciones entre clases. También cubre conceptos como interfaces, modelado de relaciones y responsabilidades de las clases.
Este documento describe los diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones, y que se representan gráficamente mediante cajas. También describe elementos clave de los diagramas de clases como atributos, operaciones, relaciones como generalización y asociación.
Este documento describe diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones, y que se representan gráficamente mediante cajas con compartimentos. También describe elementos básicos de diagramas de clases como atributos, operaciones, relaciones y notación.
Este documento describe los diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones, y que se representan gráficamente mediante cajas. También describe elementos clave de los diagramas de clases como atributos, operaciones, relaciones como generalización y asociación.
Este documento describe los diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones, y que se representan gráficamente mediante cajas. También describe elementos clave de los diagramas de clases como atributos, operaciones, relaciones como generalización y asociación.
Este documento describe los diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones, y que se representan gráficamente mediante cajas. También describe elementos clave de los diagramas de clases como atributos, operaciones, relaciones como generalización y asociación.
Este documento describe los diagramas de clases y objetos en UML. Explica que una clase representa un conjunto de objetos que comparten atributos, operaciones y relaciones, y que se representan gráficamente mediante cajas. También describe elementos clave de los diagramas de clases como atributos, operaciones, relaciones como generalización y asociación.
El documento describe los conceptos básicos de la programación orientada a objetos. Explica que en POO todo es un objeto con características (datos) y acciones (métodos) y que los programas están compuestos de objetos que se comunican entre sí a través de mensajes. También define conceptos clave como clases, objetos, encapsulamiento, herencia y polimorfismo.
Este documento discute conceptos clave de Hibernate/JPA como relaciones uno-a-muchos y muchos-a-uno, cascadas y tipos de fetching. Explica los propietarios de las relaciones, las listas frente a conjuntos, y relaciones avanzadas como muchos-a-muchos. También cubre mapeos adicionales de columnas como fórmulas, temporales, enumerados, LOB y tipos.
Este documento proporciona una introducción a los conceptos básicos de Java, incluyendo tipos de datos primitivos, clases, objetos, herencia, paquetes, métodos y constructores. También explica operadores, declaración de variables, condicionales, bucles y cadenas de caracteres.
Cursos gratis de programación en Java. Principios de programación orientada a objetos. Orientado a Grado, DAM y DAW. Otros cursos disponibles para Android, Swift, Base de datos, javascript, servicios y procesos...
El documento describe conceptos de herencia y polimorfismo en programación orientada a objetos. Explica que los objetos derivados de una clase pueden utilizarse donde sea aceptado un objeto de la clase original, debido a que comparten atributos y métodos. También introduce la clase TObject como clase base de todas las clases en Delphi y muestra un diagrama de jerarquía de herencia entre varias clases como TComponent y TControl.
This document contains the slides from a presentation on RxJava in practice given by Javier Gamarra in Madrid on November 27-28, 2015. The presentation introduces RxJava as a library for representing operations as asynchronous data streams that can be composed declaratively and consumed by multiple objects. It discusses key RxJava concepts like Observables, Subscribers, operators, and schedulers, and provides examples of using RxJava for Android development. The presentation also addresses common questions around RxJava and encourages attendees to ask additional questions.
Los presentadores describen varios juegos que utilizaron durante 5 meses para motivar a equipos de desarrollo y enseñar valores ágiles. Los juegos incluyen preparar invitaciones en grupo, construir una torre de malvaviscos, crear historias de usuario con piezas de Lego, y dinámicas de colaboración con sillas. El objetivo era cambiar la mentalidad de los equipos y mostrar los beneficios de la iteración, la colaboración y el trabajo en equipo.
Este documento presenta la agenda de la cuarta sesión de Arduino. Incluye proyectos para usar pulsadores, leds, servos y comunicación serie. Los proyectos incluyen Simon Says, controlar servos con potenciómetros, encender una matriz de leds, leer valores por serie y comunicarse con Java. También presenta ideas para construir un coche controlado y proyectos opcionales como Tickle Robot y un cazador de luz.
Este documento presenta la agenda para la tercera sesión de Arduino. Cubre temas como digital vs analógico, sensores capacitivos, altavoces y preparación para la próxima sesión. Incluye ejercicios para leer y escribir valores analógicos usando potenciómetros, LDR y altavoces. También presenta ejercicios para usar sensores capacitivos y realizar demostraciones de POV y Simon Says usando LEDs y pulsadores.
Codemotion 2013 was a conference held over two days in Madrid, Spain, attended by 1500 developers. For 10 euros, attendees received food and access to four tracks of talks on Friday and eight tracks on Saturday, along with a hackathon, meetups, and opportunities to network. While some talks were disappointing, especially on Friday, the attendee found many high-quality presentations on topics like Android and functional programming in Java, as well as ample socializing. Due to the low cost, nearby location, engaging content, and chance to see friends, the attendee looked forward to returning for Codemotion 2014.
La CAS 2013 fue una conferencia tradicional organizada por Agile Spain sobre metodologías ágiles. Incluyó charlas sobre temas como el cargo cult agile, la arquitectura y el agilismo, testing, ejemplos de empresas ágiles, técnicas para gestionar el cambio y scrumban. Los asistentes se sintieron muy motivados pero algunos opinaron que el nivel general fue bajo comparado con otras conferencias. Se anima a los asistentes a dar feedback y asistir a futuras ediciones.
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaAMADO SALVADOR
Distribuidor Oficial Ariston en Valencia: Amado Salvador distribuidor autorizado de Ariston, una marca líder en soluciones de calefacción y agua caliente sanitaria. Amado Salvador pone a tu disposición el catálogo completo de Ariston, encontrarás una amplia gama de productos diseñados para satisfacer las necesidades de hogares y empresas.
Calderas de condensación: Ofrecemos calderas de alta eficiencia energética que aprovechan al máximo el calor residual. Estas calderas Ariston son ideales para reducir el consumo de gas y minimizar las emisiones de CO2.
Bombas de calor: Las bombas de calor Ariston son una opción sostenible para la producción de agua caliente. Utilizan energía renovable del aire o el suelo para calentar el agua, lo que las convierte en una alternativa ecológica.
Termos eléctricos: Los termos eléctricos, como el modelo VELIS TECH DRY (sustito de los modelos Duo de Fleck), ofrecen diseño moderno y conectividad WIFI. Son ideales para hogares donde se necesita agua caliente de forma rápida y eficiente.
Aerotermia: Si buscas una solución aún más sostenible, considera la aerotermia. Esta tecnología extrae energía del aire exterior para calentar tu hogar y agua. Además, puede ser elegible para subvenciones locales.
Amado Salvador es el distribuidor oficial de Ariston en Valencia. Explora el catálogo y descubre cómo mejorar la comodidad y la eficiencia en tu hogar o negocio.
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaAMADO SALVADOR
Descubra el catálogo completo de buzones BTV, una marca líder en la fabricación de buzones y cajas fuertes para los sectores de ferretería, bricolaje y seguridad. Como distribuidor oficial de BTV, Amado Salvador se enorgullece de presentar esta amplia selección de productos diseñados para satisfacer las necesidades de seguridad y funcionalidad en cualquier entorno.
Descubra una variedad de buzones residenciales, comerciales y corporativos, cada uno construido con los más altos estándares de calidad y durabilidad. Desde modelos clásicos hasta diseños modernos, los buzones BTV ofrecen una combinación perfecta de estilo y resistencia, garantizando la protección de su correspondencia en todo momento.
Amado Salvador, se compromete a ofrecer productos de primera clase respaldados por un servicio excepcional al cliente. Como distribuidor oficial de BTV, entendemos la importancia de la seguridad y la tranquilidad para nuestros clientes. Por eso, trabajamos en colaboración con BTV para brindarle acceso a los mejores productos del mercado.
Explore el catálogo de buzones ahora y encuentre la solución perfecta para sus necesidades de correo y seguridad. Confíe en Amado Salvador y BTV para proporcionarle buzones de calidad excepcional que cumplan y superen sus expectativas.
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialAMADO SALVADOR
Explora el catálogo completo de cajas fuertes BTV, disponible a través de Amado Salvador, distribuidor oficial de BTV. Este catálogo presenta una amplia variedad de cajas fuertes, cada una diseñada con la más alta calidad para ofrecer la máxima seguridad y satisfacer las diversas necesidades de protección de nuestros clientes.
En Amado Salvador, como distribuidor oficial de BTV, ofrecemos productos que destacan por su innovación, durabilidad y robustez. Las cajas fuertes BTV son reconocidas por su eficiencia en la protección contra robos, incendios y otros riesgos, lo que las convierte en una opción ideal tanto para uso doméstico como comercial.
Amado Salvador, distribuidor oficial BTV, asegura que cada producto cumpla con los más estrictos estándares de calidad y seguridad. Al adquirir una caja fuerte a través de Amado Salvador, distribuidor oficial BTV, los clientes pueden tener la tranquilidad de que están obteniendo una solución confiable y duradera para la protección de sus pertenencias.
Este catálogo incluye detalles técnicos, características y opciones de personalización de cada modelo de caja fuerte BTV. Desde cajas fuertes empotrables hasta modelos de alta seguridad, Amado Salvador, como distribuidor oficial de BTV, tiene la solución perfecta para cualquier necesidad de seguridad. No pierdas la oportunidad de conocer todos los beneficios y características de las cajas fuertes BTV y protege lo que más valoras con la calidad y seguridad que solo BTV y Amado Salvador, distribuidor oficial BTV, pueden ofrecerte.
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaAMADO SALVADOR
Descubre el catálogo general de la gama de productos de refrigeración del fabricante de electrodomésticos Miele, presentado por Amado Salvador distribuidor oficial Miele en Valencia. Como distribuidor oficial de electrodomésticos Miele, Amado Salvador ofrece una amplia selección de refrigeradores, congeladores y soluciones de refrigeración de alta calidad, resistencia y diseño superior de esta marca.
La gama de productos de Miele se caracteriza por su innovación tecnológica y eficiencia energética, garantizando que cada electrodoméstico no solo cumpla con las expectativas, sino que las supere. Los refrigeradores Miele están diseñados para ofrecer un rendimiento óptimo y una conservación perfecta de los alimentos, con características avanzadas como la tecnología de enfriamiento Dynamic Cooling, sistemas de almacenamiento flexible y acabados premium.
En este catálogo, encontrarás detalles sobre los distintos modelos de refrigeradores y congeladores Miele, incluyendo sus especificaciones técnicas, características destacadas y beneficios para el usuario. Amado Salvador, como distribuidor oficial de electrodomésticos Miele, garantiza que todos los productos cumplen con los más altos estándares de calidad y durabilidad.
Explora el catálogo completo y encuentra el refrigerador Miele perfecto para tu hogar con Amado Salvador, el distribuidor oficial de electrodomésticos Miele.
KAWARU CONSULTING presenta el projecte amb l'objectiu de permetre als ciutadans realitzar tràmits administratius de manera telemàtica, des de qualsevol lloc i dispositiu, amb seguretat jurídica. Aquesta plataforma redueix els desplaçaments físics i el temps invertit en tràmits, ja que es pot fer tot en línia. A més, proporciona evidències de la correcta realització dels tràmits, garantint-ne la validesa davant d'un jutge si cal. Inicialment concebuda per al Ministeri de Justícia, la plataforma s'ha expandit per adaptar-se a diverses organitzacions i països, oferint una solució flexible i fàcil de desplegar.
3. Embedded
•
•
•
Clases que no tienen relación directa con una tabla (están contenidas dentro
de otra tabla)
o Ejemplo clásico: Usuario y dirección.
Para mapear, @Embeddable para indicar que una clase se puede incluir
dentro de otra y @Embedded para incluir dentro de una clase.
Añadid dirección a las solicitudes
o @Embeddable a la clase dirección (en vez de @Entity)
o y @Embedded en el atributo dirección dentro de solicitud.
5. Modos de identidad
•
•
Identidad de Tabla:
o @Id
o Compuesto:
Varios @Id
@EmbeddedId (clase con @Embeddable y referencia con
@EmbeddedId)
Id en otra clase y @IdClass en la tabla
Probad cualquiera de estas referencias.
6. Modos de identidad
•
•
Por favor, usad una clave subrogada.
Las claves compuestas sólo dan problemas
o Pueden no ser inmutables
o Los requisitos cambian y afectan a las claves
o Son menos eficientes (ocupan más)
o Son menos uniformes
o Son incómodas en Java (varios setters)
o Son peores en Hibernate
7. Modos de identidad
•
•
•
Generación:
o Identidad (DB2, MySQL, SQL Server...)
o Secuencia
o Tabla (hi/lo a una tabla)
o Auto
o 14 algoritmos más
En base a @GeneratedValue y seleccionando la estrategia y el generador
(@SequenceGenerator, entre otros).
Probad @SequenceGenerator para ver las opciones de configuración.
8. Modos de identidad
•
Además de un @Id puedes definir que una columna es un Id Natural:
o … @NaturalId
o buscar por natural id bySimpleNaturalId
9. Modos de identidad
•
•
•
¿Qué es la identidad?
o Identidad de la BD
o Identidad de Java
Para una MISMA sesión, las dos cosas son lo mismo.
Y fuera? Hibernate no garantiza igualdad.
10. Modos de identidad
•
•
Esto es importante en un par de casos sólo:
o Composite Primary Key Class
o 2 instancias de la misma clase en un Set en sesiones diferentes
Implementa equals y hashCode, teniendo en cuenta que dos objetos
diferentes pueden representar el mismo objeto en la base de datos.
11. Modos de identidad
•
•
•
Repetimos...
o Si usas primary keys compuestas
o O si quieres unir entidades detached (luego veremos que es...) que reúsas
en un Set
Deberías implementar equals y hashCode:
o Comparando por igualdad de negocio (columnas y valores que identifican
univocamente a una entidad)
https://community.jboss.org/wiki/EqualsAndHashCode
13. Modos de locking
•
•
•
•
Hasta ahora, sin saberlo, estamos trabajando con un modo last commit wins.
Cuando vamos a trabajar con algo, Hibernate recupera la entidad de la base
de datos. Si cuando guardamos los datos han cambiado, ese usuario pierde
esa información.
Podemos trabajar de forma optimista, al guardar Hibernate comprueba que
no se han tocado las cosas.
Si se han tocado da un error, si no, sigue con su trabajo.
14. Modos de locking
•
Para activarlo, sólo tenemos que definir un atributo de tipo Integer anotado
con @Version.
o Podemos usar un Date también
•
Probadlo!
•
•
En cualquier momento podemos llamar a un lock pesimista con session.lock()
[Avanzado] Si tenéis tiempo... bloquead la inserción de una tabla.
16. Herencia
•
•
•
Estrategias
o Tabla por clase concreta
Con polimorfismo implícito
Con uniones
o Tabla por jerarquía de clases
o Tabla por subclase
o Relaciones polimórficas
+ combinaciones de las anteriores
JPA no soporta todo lo que soporta Hibernate
18. Tabla por clase concreta con
polimorfismo implícito
•
•
Es simple, consultar contra clases concretas
Contrapartidas…
o Polimorfismo
Requiere una consulta por cada subclase concreta
Las asociaciones no se representan bien (no aceptan una FK simple)
o Semánticas compartidas entre tablas
o El esquema relacional no “conoce” la relación
o No se puede hacer una asociación hacia la abstracta (ya que no es una
entidad)
19. Tabla por clase concreta con
polimorfismo implícito
@MappedSuperclass
public abstract class AbstractPago
@Entity
public class PagoPAC extends AbstractPago
@Entity
public class PagoBeca extends AbstractPago
21. Tabla por clase concreta con uniones
•
Permite relaciones hacia la clase abstracta
•
Consultas optimizables por el SGBD
•
Contrapartidas…
o El esquema relacional no “conoce” la relación
22. Tabla por clase concreta con uniones
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractPago
@Entity
public class PagoPAC extends AbstractPago
@Entity
public class PagoBeca extends AbstractPago
24. Tabla por jerarquía
•
La mejor para el polimorfismo y para no polimorfismo
•
Contrapartidas…
o Requiere columnas nullables en las subclases
o Posible desperdicio de espacio
o Requiere discriminador
25. Tabla por jerarquía
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="tipo",
discriminatorType=DiscriminatorType.STRING)
public abstract class AbstractPago
@Entity
@DiscriminatorValue("PAC")
public class PagoPAC extends AbstractPago
@Entity
@DiscriminatorValue("beca")
public class PagoBeca extends AbstractPago
27. Tabla por subclase
•
Basada en FKs
•
Esquema normalizado
•
Contrapartidas…
o Complica el esquema
o Ineficiente en jerarquías complejas*
o Clase padre concreta
28. Tabla por subclase
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class AbstractPago
@Entity
public class PagoPAC extends AbstractPago
@Entity
public class PagoBeca extends AbstractPago
30. Relaciones polimórficas
•
•
•
Permite mapear relaciones que no se podrían de otra forma: asociaciones
polimórficas a clases desde múltiples tablas
Sólo para situaciones muy especiales
Contrapartidas…
o No puede establecer FKs
o Envers no lo soporta ☹
31. Relaciones polimórficas
public interface Cosa
@Entity
public class Beca implements Cosa
@Entity
public class Pago implements Cosa
@Any(metaColumn = @Column(name = "tipo_de_cosa"))
@AnyMetaDef(idType = "long", metaType = "string", metaValues = {
@MetaValue(value = "Beca", targetEntity = Beca.class),
@MetaValue(value = "Pago", targetEntity = Pago.class) })
@JoinColumn(name = "tipo_de_cosa_id")
public Cosa getCosa() {
35. Batch Processing
•
¿Qué pasa si lanzamos esto?
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Petition petition = new Petition(.....);
session.save(petition);
}
tx.commit();
session.close();
36. Batch Processing
•
•
Hibernate se queda sin memoria.
Podemos arreglarlo, haciendo operaciones en batch:
o Activando hibernate.jdbc.batch_size (en persistence/hibernate.cfg.xml) y
poniendolo a un valor entre 10-50
37. Batch Processing
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Petition petition = new Petition(.....);
session.save(petition);
if ( i % 20 == 0 ) { //el valor de la propiedad
session.flush();
session.clear();
}
}
tx.commit();
session.close();
38. Batch Processing
•
•
•
Stateless Session
o Sin caché de primer nivel
o Sin caché de segundo nivel
o Sin dirty checking/write behind
o Sin cascades
o Sin interceptores
o Similar a JDBC
Scrollable
HQL
39. Batch Processing
•
•
En estrategias de Fetch hay una adicional (cuarta)
o @BatchSize, recupera sentencias en bloque.
MUY interesante...
o soluciona el problema de los N+1 fetches.
41. Servicios
•
Un sistema de extensión (similar a plugins) de Hibernate.
o Desde Hibernate 4.0
o Permite el registro de servicios/implementaciones alternativas para, por
ejemplo:
TransactionFactory (transacciones)
JtaPlatform (gestión de JTA)
JndiService
JdbcServices
ConfigurationService
...
43. Transitividad
•
Cascades de JPA:
o CascadeType.PERSIST: cascada de persists
o CascadeType.MERGE: cascadas de merges
o CascadeType.REMOVE: cascade de eliminaciones
o CascadeType.REFRESH: cascade de refresh (volver a leer una entidad de
BD)
o CascadeType.DETACH: cascade de detach (desunir de sesión)
o CascadeType.ALL: todos los de arriba
44. Transitividad
•
Cascades de Hibernate (@Cascade):
o save-update...
o delete
o lock
o replicate (copiar un objeto, muy muy raro)
o evict
o delete-orphan
45. Transitividad
•
•
Delete orphan es interesante:
o Sólo aplica a oneToMany.
o Cuando elimino un elemento hijo de la colección indico que quiero
eliminarlo de la BD porque se ha quedado huérfano.
o orphanRemoval en @OneToMany.
No estoy haciendo esto: session.remove()
padre.geHijos().remove(0)
o No cuenta para Cascade.ALL.
o @OneToMany(orphanRemoval = true)
Probadlo!
46. Transitividad
•
Recomendaciones de cascade:
o Es más lógico en relaciones @OneToOne y @OneToMany (padre con
hijos)
o Si el objeto hijo en un @OneToMany no tiene sentido sin el padre ->
Cascade.ALL y orphanRemoval
o Típicos: persist, save-update...
48. Caching
•
•
•
Caché de primer nivel
o get() y load() me recuperan objetos que tienen en la sesión...
Caché de segundo nivel
Caché de queries
o Hibernate tiene en cuenta cambios en los objetos que se muestran en las
consultas.
o Depende del patrón de uso de la aplicación.
49. Caching
•
Caché de segundo nivel:
o Muy común, Hibernate se integra muy bien con varios proveedores de
caché.
o Típico para tablas de referencia (provincia, localidad, datos maestros...)
o Marcar entidades interesadas (o colecciones): @Cacheable
o @Cache(usage = CacheConcurrencyStrategy.TIPO_DE_CACHING)
50. Caching
•
Tipos de Caching:
o NONE
o READ_ONLY: no se modifican a menudo...
o NONSTRICT_READ_WRITE: pocas transacciones apuntando al mismo
item...
o READ_WRITE: actualizaciones frecuentes.
o TRANSACTIONAL
54. Performance
•
•
Hibernate no es lento.
Recomendaciones de rendimiento:
o Tener en cuenta las 4 estrategias de fetching (Select, Subselect, Join,
BatchSize)
o Cuidado con N+1
o Fetch-profiles (para personalizar escenarios de búsqueda)
o Personalizar Fetch en Criterias
(criteria.setFetchMode("propiedad",MODO)) EAGER=JOIN, LAZY=SELECT
Probadlo!"
55. Performance
•
•
•
Tres grandes tipos de colecciones:
o indexed collections (mapas, listas, arrays)
o sets
o bags
Las dos primeras son las más eficientes en save/remove/update de
elementos.
Bags y lists son más eficientes en @OneToMany con mappedBy
56. Performance
•
•
One-shot-delete
o Imaginemos que tenemos 20 elementos, eliminamos 18 y añadimos 3
o Podemos borrar 18 elementos (1 a 1) e insertar 3
o Eliminar todo e insertar 5
En este caso conviene hacer clear();
Probadlo!
58. Performance
•
Si realiza muchas consultas:
o plantear estrategias estilo JOIN/SUBSELECT
o Activar batch o utilizar @BatchSize
o Activar caché de segundo nivel
o HQL
o SQL
o Query cache
59. Performance
•
Si realiza una consulta muy pesada:
o Eliminar cruces JOIN (empezando por colecciones)
o Poner asociaciones *ToOne a Lazy (con Select o Subselect)
o Índices
o HQL
o SQL
o Query cache
61. Validaciones
•
•
Hibernate se complementa con Hibernate Validator
Es la base de Bean Validation, un estándar Java EE 6
o @NotNull
o @Past
o @Size
o @Pattern
o @Max
o @Email
o @CreditCardNumber
62. Validaciones
•
•
Incluid las librerías de validation (es más sencillo en Java EE)
o Añadid una anotación y probad a guardar.
Podemos llamar a los validadores con:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> constraintViolations =
validator.validate(user);
•
Probadlo!
64. Envers
•
•
•
Librería de auditoría.
Para activar la versión "básica" basta con:
o Copiar la librería
o @Audited
o Cuidado con relaciones: @NotAudited (de momento)
Probadlo!
66. Envers
•
Dos estrategias, start y start-end
•
Puedo guardar el usuario o información adicional
•
Las querys pueden llegar a ser complejas:
List personsAtAddress = getAuditReader().createQuery()
.forEntitiesAtRevision(Person.class, 12)
.addOrder(AuditEntity.property("surname").desc())
.add(AuditEntity.relatedId("address").eq(addressId))
.setFirstResult(4)
.setMaxResults(2)
.getResultList();
67. Envers
•
Puedo preguntar a una entidad por las revisiones que ha tenido
Number revision = (Number) getAuditReader().createQuery()
.forRevisionsOfEntity(MyEntity.class, false, true)
.setProjection(AuditEntity.revisionNumber().min())
.add(AuditEntity.id().eq(entityId))
.add(AuditEntity.revisionNumber().gt(42))
.getSingleResult();
•
Probadlo!
68. Envers
•
•
Envers es más quisquilloso en algún tipo concreto de mapeos:
o Bags
o @OneToMany+@JoinColumn, mappedBy (necesita @AuditJoinTable)
o @OneToMany+@JoinColumn, insertable=false, updatable = false
(necesita @AuditMappedBy)
Siempre se puede decidir no auditar una relación con @NotAudited.
70. Multi-tenancy
•
Una aplicación que sirve múltiples clientes.
•
Típico de SaaS (Software as Service: google docs)
•
Cada cliente sólo debe poder ver sus datos
o Base de datos diferente, JDBC que cambia
o Esquema separado, schema que cambia al conectarse
o Única base de datos, discriminador
71. Multi-tenancy
•
•
En Hibernate:
Session session = sessionFactory.withOptions()
.tenantIdentifier( yourTenantIdentifier )
.openSession();
Opciones de identificador:
o DATABASE
o SCHEMA
o DISCRIMINATOR (No soportada aún, Hibernate 5)
76. Recomendaciones
•
•
No utilices claves compuestas
o Claves surrogadas siempre, ni naturales ni compuestas
En el import.sql (ficheros sql que carga Hibernate directamente), los ids,
negativos (para no hacer conflicto con ids generados)
•
No uses herencia, usa agregación (GoF)
•
No uses mapas, usa entidades y relaciones
77. Recomendaciones
•
•
•
•
Cuando estés mapeando por primera vez, hacer tests (incluso vacíos) está
bien:
o No arrancas el servidor de aplicaciones!
Ojo con los "lazos" en los modelos y las relaciones bidireccionales...
Se puede implementar SoftDelete (@SQLDelete) o restricciones globales de
búsqueda (@Where)
Puedo ver los valores de las consultas (?) -> en log4j, org.hibernate.type a
TRACE.
78. Errores típicos
•
Lazy Initialization Exception, causado por:
o Intentar cargar desde la vista/lógica con la sesión cerrada una lista de
objetos/objeto con fetch a LAZY.
o -> Hibernate.initialize()
o -> Activar lazy load sin transacciones:
hibernate.enable_lazy_load_no_trans
o -> OpenSessionInView
o -> Conversaciones
79. Errores típicos
•
•
Detached entity passed to persist, causado por:
o Fijar un id manualmente a una entidad que utiliza un auto-generado
o Sin cascadas, intentar guardar una relación de un objeto que no está en la
base de datos.
o Llamada persist() o save() de un objeto que ya está en la BD
Cannot Open Connection, causado por:
o Malos valores de conexión a la BD.
80. Errores típicos
•
•
•
NPE en IntegerType.next(IntegerType.java:82), causado por:
o Número de versión (@version) nulo
Collection was not processed by flush, causado por (varios motivos,
peliagudo):
o Envers, bags y malas anotaciones de envers.
o Jugar con las listas (utilizar add() a veces y sustituir las listas enteras al
mismo tiempo).
Llamo a persist() y no tengo id, causado por:
o persist() no asigna el id directamente
o -> usa save()
81. Errores típicos
•
•
No row with the given identifier exists (uff), causado por:
o Hay una entidad que apunta a una fila de la BD que ya no existe
o Modificaciones en paralelo de la colección
o Cascades delete/eliminaciones de elementos de la colección sin
actualizar el otro lado de la relación.
Hibernate me devuelve datos duplicados
Relaciones bidireccionales mal mapeadas
Cruces cartesianos sin Distinct.ROOT_ENTITY
•
•
82. Errores típicos
•
A collection with cascade delete-orphan was no longer referenced...
o Mala gestión de las colecciones:
Coleccion coleccion = miEntidad.getColeccion();
Coleccion coleccionNueva = new ColeccionImpl(coleccion);
miEntidad.setColeccion(coleccionNueva);
•
o -> add()
De principiante (y no tanto): constructor, @Entity, @Id...
84. Recapitulando...
•
•
•
•
•
¿Cómo es una clase persistente, una entidad?
o @Entity y @Id (Constructor [Serializable])
¿Cómo se especifica los metadatos de mapeos?
o Anotaciones | XML @OneToMany...
¿Qué relación hay entre identidad de objetos y de base de datos?
o Dentro de una sesión, son lo mismo. Si hay objetos detached -> no.
¿Qué tipos de herencia hay?
o 4 -> tablas única, 2 tablas (2), 3 tablas
¿Cuál es el ciclo de vida de un objeto persistente?
o Persistent -> Detached. Transient nuevo, Delete a eliminar
85. Recapitulando...
•
•
¿Cómo se busca y ordena?
o Criteria, HQL, SQL, anotaciones...
¿Cómo se recuperan objetos con asociaciones?
o @OneToMany... fetches
86. Recapitulando...
•
Preguntas de examen
o get() y load() -> Hibernate | JPA (lazy)
o save() / persist() / saveOrUpdate() -> = que antes, diferencias en
tratamiento en id.
o named SQL Query? -> query definida para reusar.
o SessionFactory? -> objeto único.. thread safe me da sesiones
o Session? Threadsafe? -> no...
o sorted/ordered collections? -> ordenada en memoria o no
87. Recapitulando...
•
Preguntas de examen
o transient/persistent/detached? -> estados de la entidad
o session.lock()? -> marcar entidad buena, bloquear BD
o second level cache? ->
o Constructor sin argumentos? -> no sabe qué crear...
o Hibernate Entity Class Final? -> es malo por rendimiento
o lazy initialization exception? ->
o N+1 selects? ->
89. Ventajas e inconvenientes de los ORMs
•
Ideas?
o Te olvidas de la base de datos (buscar inserts o updates modificados)
o Y del SGBD (usando estándar SQL)
o Simplifica la gestión de inserciones/actualizaciones
o Otra herramienta/capa más
o 'Mapeos complejos'
o Conflictiva si no la usas bien
o ...
90. Ventajas de los ORMs
•
•
•
•
•
Diseño Orientado al Objeto puro (con pegas)
Separación de lógica y datos → Java EE, EJBs...
Productividad
o Operaciones en cascada
o Navegación
o Mapea una vez → CRUD completo
Separación de responsabilidades
Valor añadido (validación, envers...)
91. Inconvenientes de los ORMs
•
•
•
•
•
Necesitas conocimientos de SQL
Conviene “olvidarse del modelo” → modelo relacional “incorrecto”.
Se delega el control de las consultas
Modelo de dominio anémico
o Exposición de la implementación
o Separación de lógica y datos
o …
… “(…) the main thing is to be practical and stop paying too much attention
to lame patterns talk.”