0% encontró este documento útil (0 votos)
272 vistas58 páginas

Hibernate JPA

El documento proporciona información sobre Hibernate y JPA. Hibernate es un framework de objetos relacionales (ORM) creado por Red Hat que implementa el estándar JPA de Java. JPA es una especificación que define una interfaz para los ORM en Java. El documento explica las características y configuración básicas de Hibernate y JPA.

Cargado por

Jose Martin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
272 vistas58 páginas

Hibernate JPA

El documento proporciona información sobre Hibernate y JPA. Hibernate es un framework de objetos relacionales (ORM) creado por Red Hat que implementa el estándar JPA de Java. JPA es una especificación que define una interfaz para los ORM en Java. El documento explica las características y configuración básicas de Hibernate y JPA.

Cargado por

Jose Martin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 58

HIBERNATE

JPA

Pablo López Grieco


Presentaciones

 Java ?
 O.O. ?
 Interfaces / Polimorfismo ?
 Acoplamiento ?
 JDBC ?
 Patrones de Diseño ?
 Singleton ?
 Value Object ?
 DAO ?
 Frameworks ?

Pablo López Grieco 29/10/2015


Introducción

Atributos (complejos)
OBJETOS Métodos

Herencia

Esquemas
BBDD Filas
Tablas PK
Relacionales FK
Indices

Pablo López Grieco 29/10/2015


ORM

Pablo López Grieco 29/10/2015


ORM
Object Relational Mapping
BBDD
OBJETOS ORM
Instancias persistentes
Relacionales

1999 EJB 1.0


2001 EJB 2.0
2002 JDO
2002 Hibernate
2006 JPA 1.0 (EJB 3.0) – JAVA EE5
2009 JPA 2.0 – JAVA EE6
2013 JPA 2.1 – JAVA EE7

Pablo López Grieco 29/10/2015


HIBERNATE / JPA
JPA es un estándar de Sun (Oralce) que define un API para los ORM en
Java. Es una especificación.
Los entity beans de los servidores Java EE se declaran siguiendo el api JPA.

HIBERNATE es un ORM de RedHat, creado por Gavin King, luego JBoss


contrató al grupo de desarrollo y dio soporte al proyecto.
Implementa el estándar JPA

IMPLEMENTACIONES JPA
Hibernate RedHat
Eclipselink Eclipse Foundation
Toplink Oracle
ObjectDB
CocoBase
OpenJPA Apache
Kodo Bea

Pablo López Grieco 29/10/2015


CARACTERÍSTICAS
 Las Entity class deben ser POJO (Plain Old Java Object) -
JavaBean
 Son clases simples, no necesitan heredar de otra clase, sólo
implementa Serializable
 Constructor por defecto (explícito o implícito)
 Debe ser de primer nivel (no interna)
 No ser final
 Implementa Serializable
 Getter y Setter para sus atributos

 Mapeo (Metadatos):
 Anotaciones (Utiliza el estándar JPA)
 Archivo de Configuración XML (HIBERNATE o JPA)

Pablo López Grieco 29/10/2015


Mapeo

ANOTACIONES DESCRIPTOR XML


+ Todo en el mismo lugar - Mantenimiento de ficheros
- Es necesario recompilar externos (1 x clase)

- Menos portable (si no se + No es necesario recompilar


quiere utilizar JPA)

Si existen ambos, prevalece el Descriptor XML

Pablo López Grieco 29/10/2015


Hibernate

Aplicación

Objetos Persistentes

Hibernate

hibernate.cfg mapeo XML

Base de Datos Relacional

Pablo López Grieco 29/10/2015


Hibernate 4
Bibliotecas
\hibernate-release-4.3.7.Final\lib\required\*

antlr-2.7.7.jar
archs
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar

\hibernate-release-4.3.7.Final\lib\jpa\*
hibernate-entitymanager-4.3.7.Final.jar

Pablo López Grieco 29/10/2015


HIBERNATE – hibernate.cfg.xml
En la aplicación se debe incluir el archivo hibernate.cfg.xml donde se
configura Hibernate. Ej. mapeo con ficheros xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/curso_hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<mapping resource="persist-xml/introduccion/persona.hbm.xml"/>
</session-factory>

</hibernate-configuration>

Pablo López Grieco 29/10/2015


HIBERNATE – hibernate.cfg.xml
En la aplicación se debe incluir el archivo hibernate.cfg.xml donde se
configura Hibernate. Ej. mapeo con anotaciones

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/curso_hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<mapping class="introduccion.Persona"/>
</session-factory>

</hibernate-configuration>

Pablo López Grieco 29/10/2015


JPA - persistence.xml
En la carpeta META-INF se debe incluir el archivo persistence.xml con
la configuración de JPA. Ej. mapeo con ficheros xml

<?xml version="1.0" encoding="UTF-8"?>


<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">

<persistence-unit name="UnidadAgenda" transaction-type="RESOURCE_LOCAL">


<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

<mapping-file>persist-xml/introduccion/Persona.xml</mapping-file>

<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.pool_size" value="1" />

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>


<property name="hibernate.connection.url" value="jdbc:mysql://localhost/curso_hibernate"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
</properties>
</persistence-unit>

</persistence>

Pablo López Grieco 29/10/2015


JPA - persistence.xml
En la carpeta META-INF se debe incluir el archivo persistence.xml con
la configuración de JPA. Ej. mapeo con anotaciones

<?xml version="1.0" encoding="UTF-8"?>


<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">

<persistence-unit name="UnidadAgenda" transaction-type="RESOURCE_LOCAL">


<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

<class>introduccion.Persona</class> <!– OPCIONAL-->

<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.pool_size" value="1" />

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>


<property name="hibernate.connection.url" value="jdbc:mysql://localhost/curso_hibernate"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
</properties>
</persistence-unit>

</persistence>

Pablo López Grieco 29/10/2015


HIBERNATE – Mapeo xml
<hibernate-mapping> <class> <id> <property>
Ej. persona.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-mapping PUBLIC "-
//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-
mapping-3.0.dtd">

<hibernate-mapping>
<class name="introduccion.Persona">
<id name="idPersona" type="integer" />
<property name="apellidos" />
<property name="apodo" />
<property name="nombre" />
<property name="dni" />
</class>
</hibernate-mapping>

Todas las propiedades serán mapeadas a una tabla con el mismo nombre de la clase y cada
propiedad a una columna homónima

Pablo López Grieco 29/10/2015


HIBERNATE – Mapeo xml
<hibernate-mapping> <class> <id> <property>
Ej. persona.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-mapping PUBLIC "-
//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-
mapping-3.0.dtd">

<hibernate-mapping>
<class name="introduccion.Persona">
<id name="idPersona" type="integer" />
<property name="apellidos" />
<property name="apodo" />
<property name="nombre" />
<property name="dni" />
</class>
</hibernate-mapping>

Todas las propiedades serán mapeadas a una tabla con el mismo nombre de la clase y cada
propiedad a una columna homónima

Pablo López Grieco 29/10/2015


JPA - @Entity / @Id
@Entity Refiere a la clase e indica que será una entidad
@Id Indica el atributo que se corresponde con la PK

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Persona implements Serializable {
@Id
private int idPersona;
private String apellidos;
private String apodo;
private String nombre;
private String dni;

public Persona() {
}

public int getIdPersona() {


return idPersona;
}

Todas las propiedades serán mapeadas a una tabla con el mismo nombre de la clase y cada
propiedad a una columna homónima

Pablo López Grieco 29/10/2015


JPA - @Entity / @Id
@Entity Refiere a la clase e indica que será una entidad
@Id Indica el atributo que se corresponde con la PK

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Persona implements Serializable {
@Id
private int idPersona;
private String apellidos;
private String apodo;
private String nombre;
private String dni;

public Persona() {
}

public int getIdPersona() {


return idPersona;
}

Todas las propiedades serán mapeadas a una tabla con el mismo nombre de la clase y cada
propiedad a una columna homónima

Pablo López Grieco 29/10/2015


JPA – Mapeo xml
<entity> <attributes> <id>
Ej. Persona.xml

<?xml version="1.0" encoding="UTF-8"?>


<entity-mappings xmlns="http://java.su . . .
version="2.0">

<description>
Mapeo minimo de una Entidad persistente
</description>

<entity class="jpa.Persona" access="FIELD">


<attributes>
<id name="idPersona" />
</attributes>
</entity>
</entity-mappings>

Todas las propiedades serán mapeadas a una tabla con el mismo nombre de la clase y cada
propiedad a una columna homónima

Pablo López Grieco 29/10/2015


JPA – Mapeo xml
<entity> <attributes> <id>
Ej. Persona.xml

<?xml version="1.0" encoding="UTF-8"?>


<entity-mappings xmlns="http://java.su . . .
version="2.0">

<description>
Mapeo minimo de una Entidad persistente
</description>

<entity class="jpa.Persona“ access="FIELD">


<attributes>
<id name="idPersona" />
</attributes>
</entity>
</entity-mappings>

Todas las propiedades serán mapeadas a una tabla con el mismo nombre de la clase y cada
propiedad a una columna homónima

Pablo López Grieco 29/10/2015


HIBERNATE - Session
SessionFactory sessionFactory;
Session session;
Configuration configuration = new Configuration();
configuration.configure("persist-xml/hibernate.cfg.xml");

ServiceRegistry serviceRegistry;
serviceRegistry = new StandardServiceRegistryBuilder()…

sessionFactory =
configuration.buildSessionFactory(serviceRegistry);

 SessionFactory session=sessionFactory.openSession();
 Session . . .
session.close();
sessionFactory.close();
 ServiceRegistry
 Se obtiene de StandardServiceRegistryBuilder()
 Configuration
 .configure(String xml)
 SessionFactory .buildSessionFactory(ServiceRegistry sr)
 SessionFactory
 Session .openSession()

Pablo López Grieco 29/10/2015


HIBERNATE - Session
 id save(Object o)  Object get(Class c , Object pk)
 void update(Object o)  Crear Queries (vs. métodos)
 void saveOrUpdate(Object o)  void flush()
 void delete(Object o)  Connection close()

session=sessionFactory.openSession();

Persona p = new Persona();


p.setApellidos(“...");

session.beginTransaction();
session.save(p);
session.getTransaction().commit();

Persona otra = (Persona)session.get(Persona.class, 27);


System.out.println(otra.getApodo());

session.close();
sessionFactory.close();

Pablo López Grieco 29/10/2015


JPA - Entity Manager
EntityManagerFactory emf;
EntityManager em;

emf =
Persistence.createEntityManagerFactory("ejemplos_curso");
em = emf.createEntityManager();

em.close();
emf.close();

 EntityManagerFactory
 EntityManager

 Persistence
 .createEntityManagerFactory(persistent_unit) EntityManagerFactory
 EntityManagerFactory
 .createEntityManager() EntityManager

Pablo López Grieco 29/10/2015


JPA - EntityManager
 void persist(Objetc o)  EntityTransaction getTransaction()
 <T> merge(<T> o)  Crear Queries (vs. métodos)
 void remove(Object o)  void flush()
 <T> find(Class<T> , Object pk)  void close()

em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();

Persona p = new Persona();


p.setApellidos(“...");

tx.begin();
em.persist(mo);
tx.commit();

Persona otra = em.find(Persona.class, 27);


System.out.println(otra.getApodo());

em.close();
emf.close();

Pablo López Grieco 29/10/2015


Transacciones
Transaction getTransaction();

EntityTransaction
• void begin()
• void commit()
• void rollback()

Pablo López Grieco 29/10/2015


JPA – Si los nombres no
coinciden
@Entity
@Table(name="personas")
public class Persona implements Serializable {
@Id
@Column (name = "id_persona")
private int idPersona;
@Column (name = "p_apellidos")
private String apellidos;
@Column (name = "p_apodo")
private String apodo;
@Column (name = "p_nombre")
private String nombre;
@Column (name = "p_dni")
private String dni;
public Persona() {
}

Pablo López Grieco 29/10/2015


JPA – Si los nombres no
coinciden
@Entity
@Table(name="personas")
public class Persona implements Serializable {
@Id
@Column (name = "id_persona")
private int idPersona;
@Column (name = "p_apellidos")
private String apellidos;
@Column (name = "p_apodo")
private String apodo;
@Column (name = "p_nombre")
private String nombre;
@Column (name = "p_dni")
private String dni;
public Persona() {
}

Pablo López Grieco 29/10/2015


Lectura Temprana y
Demorada
Permite definir el momento que se lee un atributo “pesado”
@Basic (fetch = tipo_fetch)

Lectura Demorada @Basic (fetch = FetchType.LAZY)


Leerá los datos de la tabla en el momento
que quiera utilizarse la propiedad

Lectura Temprana @Basic (fetch = FetchType.EAGER)


Leerá los datos de la tabla al leer el objeto
(comportamiento por defecto)
@Basic (fetch = FetchType.LAZY)
private Imagen img;

Pablo López Grieco 29/10/2015


Otras anotaciones

@Transient
Los atributos transient no se almacenan en la bbdd

@Transient
private int edad;

@Basic (optional=false)
El atributo no admite nulos
@Column (name = "p_dni")
@Basic (optional=false)
private String dni;

Pablo López Grieco 29/10/2015


Tipos enumerados
@Enumerated
enum Sexo {HOMBRE, MUJER};

private Sexo sexo;

@Enumerated
@Column (name = "p_sexo")
private Sexo sexo;
Almacena el orden del valor
(cuidado con el cambio de orden)
@Column (name = "p_sexo")
private Sexo sexo;

@Enumerated (EnumType.STRING)
@Column (name = "p_sexo") Almacena el valor
private Sexo sexo;

Pablo López Grieco 29/10/2015


Tipos Insertables
No tienen identidad. Serán persistidos
dentro de un Entidad u otro insertable

@Embedded
public class Persona04 implements Serializable {

@Embedded
private Domicilio domicilio;

@Embeddable
@Embeddable
public class Domicilio implements Serializable{

Pablo López Grieco 29/10/2015


Tipos Insertables
No tienen identidad. Serán persistidos
dentro de un Entidad u otro insertable

@Embedded
public class Persona04 implements Serializable {

@Embedded
private Domicilio domicilio;

@Embeddable
@Embeddable
public class Domicilio implements Serializable{

Pablo López Grieco 29/10/2015


PK Compuestas
 Clase que representa la PK
EmbeddedId property
 La PK compuesta se modela en una clase, que debe ser
serializable y definida como @Embeddable
 En la Entidad, el atributo PK se declara con
@EmbeddedId

 Múltiples atributos PK (No estándar en JPA)


Multiple @Id properties
 No está dentro del estándar JPA, Hibernate lo soporta
 Se declaran los atributos que pertenecen a la PK dentro
de la Entidad con la anotación @Id cada uno

Pablo López Grieco 29/10/2015


Tipo de Acceso
@Entity
public class Persona implements Serializable {
Atributos @Id
private int idPersona;
FIELD
private String apellidos;

@Entity
public class Persona implements Serializable {
Métodos private int idPersona;
getters private String apellidos;

@Id
PROPERTY public int getIdPersona() {
}

Pablo López Grieco 29/10/2015


Tipos de Acceso heredado

 Las clases insertables heredan el tipo de acceso

 Se puede invalidar (cambiar) el tipo de acceso


por defecto o heredado (clases Embeddable), a
nivel de clase o a una propiedad en particular

 @Access(AccessType.PROPERTY)

 @Access(AccessType.FIELD)

Pablo López Grieco 29/10/2015


Mapeo de Herencia
@Inheritance

 Single Table Strategy


@Inheritance (strategy=InheritanceType.SINGLE_TABLE)

 Joined Subclass Strategy


@Inheritance (strategy=InheritanceType.JOINED)

 Table per Class Strategy


@Inheritance (strategy=InheritanceType.TABLE_PER_CLASS)

Pablo López Grieco 29/10/2015


Herencia Single Table Strategy
@Inheritance (strategy=InheritanceType.SINGLE_TABLE)
• Mapeo por defecto.
• Todas las clases de una misma familia son almacenadas en una única tabla.
• Una columna por cada atributo de cada clase y subclase de la familia.
• Una columna adicional para el tipo de clase al que hace referencia cada fila.

Pablo López Grieco 29/10/2015


Herencia Single Table Strategy

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="tipo_figura", discriminatorType=DiscriminatorType.STRING)
public abstract class Figura {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
int idFigura;
double x;
double y;

@Entity
@Entity
@DiscriminatorValue("RECTANGULO")
@DiscriminatorValue("CIRCULO")
public class Rectangulo extends Figura {
public class Circulo extends Figura {
double l1;
double r;
double l2;

Pablo López Grieco 29/10/2015


Herencia Joined Subclass Strategy
@Inheritance (strategy=InheritanceType.JOINED)
• Cada clase y subclase (abstracta o concreta) se almacenará en su propia tabla.
• La clave primaria de la tabla raíz es la misma que la de las subclases.
• Cada subclase almacenará en su propia tabla únicamente sus atributos propios y su clave
primaria es a su vez clave foránea a su tabla raíz.

Pablo López Grieco 29/10/2015


Herencia Joined Subclass Strategy

@Entity
@Table (name = "figuras02")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Figura02 {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
int idFigura;

@Entity
@Entity @Table (name = "rectangulo_02")
@Table (name = "circulo_02") public class Rectangulo02 extends Figura02 {
public class Circulo02 extends Figura02 {
double r; double l1;
double l2;

Pablo López Grieco 29/10/2015


Herencia
Table per Class Strategy
@Inheritance (strategy=InheritanceType.TABLE_PER_CLASS)

 Una tabla por cada clase.

 Todas las tablas tienen “todos” los atributos,


propios y heredados.

 Las tablas, comparte la PK con la tabla de


la clase padre.

 NO ESTÁ RECOMENDADO SU USO

Pablo López Grieco 29/10/2015


Mapeo de Relaciones
(Uno a Uno)

Pablo López Grieco 29/10/2015


Uno a Uno (unidireccional)
@Entity
public class Contacto{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idContacto;
private String nombre;

@OneToOne (cascade = CascadeType.ALL)


@JoinColumn(name = "iddomicilio")
private Domicilio dom;

@Entity
public class Domicilio {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idDomicilio;

private String tipoVia;


Pablo López Grieco 29/10/2015


Uno a Uno (bidireccional)
@Entity
public class Contacto2{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idContacto;
private String nombre;

@OneToOne (cascade = CascadeType.ALL)


@JoinColumn(name = "iddomicilio")
private Domicilio dom; @Entity
@Table (name = "domicilio")
public class Domicilio2 {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idDomicilio;

private String tipoVia;



@OneToOne(mappedBy = "dom")
private Contacto2 contacto;

Pablo López Grieco 29/10/2015


Muchos a Uno – tipos básicos

@Entity
@Table (name = "contacto")
public class Contacto3{

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idContacto;
private String nombre;

@ElementCollection
@CollectionTable (name="telefonos", joinColumns = @JoinColumn (name = "idcontacto"))
@Column(name="telefono")
private List<String> telefonos;

Pablo López Grieco 29/10/2015


Muchos a Uno
unidireccional

Pablo López Grieco 29/10/2015


Muchos a Uno
unidireccional
@Entity
@Table(name="partidos")
public class Partido implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idpartido;
private String partido;

@ManyToOne
@JoinColumn (name = "idcampo")
@Entity
private Campo campo;
@Table(name="campos")
public class Campo implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idcampo;
private String campo;
private String direccion;

Pablo López Grieco 29/10/2015


Muchos a Uno
bidireccional

Pablo López Grieco 29/10/2015


Muchos a Uno
bidireccional
@Entity
@Table(name="partidos_02")
public class Partido02 implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idpartido;
private String partido;

@ManyToOne
@JoinColumn (name = "idequipo")
private Equipo02 equipo; @Entity
… @Table(name="equipos_02")
public class Equipo02 implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idEquipo;
private String equipo;

@OneToMany (mappedBy="equipo")
private List<Partido02> partidos;

Pablo López Grieco 29/10/2015


Muchos a Muchos

Pablo López Grieco 29/10/2015


Muchos a Muchos
@Entity
@Table(name="equipos_03")
public class Equipo03 implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idEquipo;
private String equipo;

@ManyToMany
@JoinTable(name="equipos_jugadores_03"
, joinColumns={ @JoinColumn(name="IdEquipo")}
, inverseJoinColumns={@JoinColumn(name="idJugador")}))
private List<Jugador03> jugadores;
@Entity
@Table(name="jugadores_03")
public class Jugador03 implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idJugador;
private String dorsal;
private String nombreYApellidos;
private String licencia;

@ManyToMany(mappedBy="jugadores")
Pablo López Grieco private List<Equipo03> equipos; 29/10/2015
JP QL
 Permite realizar consultas sobre Objetos (no tablas)
 Sintaxis similar a SQL

SELECT c FROM Contacto c


Query q = em.createQuery("SELECT c FROM Contacto c");
List<Contacto> lista = q.getResultList();

 Obtiene todas las instancias de la clase Contacto


 Contacto es el nombre de la clase (no de la tabla)
 c es una abreviatura de la Clase y con él puedo
acceder a los atributos de la Clase como si fuera una
instancia
SELECT c.nombre FROM Contacto c
Query q = em.createQuery("SELECT c.nombre FROM Contacto c");
List<String> lista = q.getResultList();

Pablo López Grieco 29/10/2015


JP QL
 DISTINCT
 SELECT DISTINCT c.nombre FROM Contacto c
 COUNT()
 SELECT COUNT (c) FROM Contacto c
 WHERE
 SELECT c FROM Contacto C WHERE condiciones
 BETWEEN
 … WHERE c.valor BETWEEN 100 AND 1000
 LIKE (% y _)
 … WHERE c.nombre LIKE ‘%bravo%’
 ORDER BY
 SELECT c FROM Contacto c ORDER BY c.apellidos

Pablo López Grieco 29/10/2015


JP QL
Queries con parámetros

 Por posición
 …WHERE c.idContato = 1 AND c.algo = 2
 q.setParameter(1, 107)
 q.setParameter(2, “valor de algo”)

 Por nombre
 …WHERE c.idContato = :id AND c.algo = :algo…
 q.setParameter(“id”, 107)
 q.setParameter(“algo”, “su valor”)

Pablo López Grieco 29/10/2015


JP QL
Actualización

 UPDATE
 UPDATE Contacto c SET c.nombre = ‘Pedro’
WHERE c.IdContacto =105

 DELETE
 DELETE FROM Contacto c WHERE c.idContacto = 107

Pablo López Grieco 29/10/2015


JP QL
Ejecución
 createQuery(String jpql) Query
Query q = em.createQuery(“SELECT c FROM Contacto c”);
List<Contacto> lista = q.getResultList();

 createQuery(String jpql, Class<T>) TypedQuery


TypedQuery<Contacto> q = em.createQuery(
“SELECT c FROM Contacto c WHERE c.nombre LIKE :nombre”,
Contacto.class);
q.setParameter("nombre", "%" + nombre + "%");
List<Contacto> lista = q.getResultList();

Pablo López Grieco 29/10/2015


JP QL
NamedQueries

 createNamedQuery(String jpql) (Estáticas / Con Nombre)


@Entity
@Table(name = “contactos")
@NamedQuery(name = “Contacto.findAll", query = "SELECT c
FROM Contacto c")
public class Contacto implements Serializable {

}

TypedQuery q = em.createNamedQuery(“Contacto.findAll”,
Contacto.class);
List<Contacto> lista = q.getResultList();

Pablo López Grieco 29/10/2015


JP QL
Native SQL Queries

Query query = em.createNativeQuery("SELECT * FROM CONTACTOS",


Contacto.class);
List<Contacto> lista = query.getResultList();

Query query = em.createNativeQuery("DELETE FROM CONTACTOS");


int columnas = query.executeUpdate();

Pablo López Grieco 29/10/2015

También podría gustarte