m3-uf2 persistencia con hibernate


eugeniaperez.es

Unidad 2: JPA VS. HIBERNATE

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.1 Java Persistence API

 

Java Persistence API (JPA) es la API de persistencia (javax.persistence) desarrollada para la plataforma Java EE. Es un framework que maneja datos relacionales en aplicaciones usando la Plataforma Java en sus ediciones Java SE y Java EE.

Conserva las ventajas de la OO al seguir el patrón de mapeo objeto-relacional y permitir usar  POJOs.

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.1 Java Persistence API

 

  • JPA combina ideas y conceptos de los principales frameworks de persistencia, como Hibernate.
  • El mapeo objeto-relacional se realiza mediante anotaciones
  • Se utiliza un motor de persistencia para la traducción entre objetos-registros
  • Para su configuración se utiliza persistence.xml ( hibernate.cfg.xml)

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.2 Implementaciones de JPA

 

Existen muchas entre las cuáles Hibernate es la más usada. Destacan las siguientes:

JPA establece una interface común que es implementada por un proveedor de persistencia  (Hibernate) que podemos elegir

El proveedor quién realiza el trabajo funcionando bajo la API de JPA.

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

 

Crearemos una entidad simple o POJO (@Entity):

  • Con constructor por defecto 
  • Que sea clase de primer nivel (no interna)
  • No sea final
  • Implementar la interface java.io.Serializable 

 

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

 

Todas las entidades poseen una identidad que las diferencia del resto: @Id  (Mejor Integer que int) Lo recomendable es Long

Para hacerla autogenerada: @GeneratedValue

Por defecto: las entidades serán mapeadas a una tabla de la BD del mismo nombre, y cada una de sus propiedades será mapeada a una columna con el mismo nombre también.

  • Es posible variar esto con @Table y @Column

 

 

 

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

 

Por defecto las propiedades se leen tempranamente:

 

Pero es un comportamiento que se puede variar con la lectura demorada, para evitar el coste de crear la entidad si no se utiliza:

 

 

@Basic(fetch = FetchType.EAGER)
private Image banner;
@Basic(fetch = FetchType.LAZY)
private Image banner;

Se debe utilizar con moderación puesto que compromete el rendimiento

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

 

JPA puede mapear los tipos enumerados (enum) mediante la anotación @Enumerated:

 

Por defecto de JPA mapeará cada valor ordinal a una columna de tipo numérico en la base de datos: 

  • Genre.COMEDY  insertará el valor 2

Se puede variar para almacenar su nombre:

 

 

public class Film {

    @Enumerated
    private Genre genre;

    ...

    public enum Genre { 
        HORROR, 
        DRAMA, 
        COMEDY, 
        ACTION
    } 

}
@Enumerated(EnumType.STRING)
private Genero genero;

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

 

Si no quiero almacenar alguna propiedad: @Transient. Por ejemplo, la edad de una Persona.

Su valor puede ser calculado en tiempo de ejecución gracias a la propiedad fechaNacimiento.

 

 

@Transient
private int age;
public int getAge() { 
    // workout the age and return it 
}
@Entity 
public class Person { 
    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 
    private String surname; 
    private Date dateOfBirth; 
    private int age; 
     
    // getters y setters 
} 

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

 

Los tipos insertables (embeddable types) son objetos que no tienen identidad, por lo que para ser persistidos deben ser primero insertados dentro de una entidad. Entidades débiles

Se declaran con @Embeddable:

 

 

 

 

 

@Embeddable 
public class Address { 
    private String streetName; 
    private int postalCode; 
    
    // ... 
} 
@Entity 
public class Person { 
    // ... 
    
    @Embedded 
    private Address address; 
} 

Se insertan con @Embbeded:

unidad 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

 

Es necesario ser coherente con el tipo de acceso:

  • Acceso a variable (field access)
  • Acceso a propiedad (property access)

El tipo de acceso que usará una entidad está definido por el lugar donde situemos sus anotaciones de mapeo.

Es necesario ser congruente, evitando mezclar los tipos. 

 

 

 

 

 

 

unidad 2: JPA VS. HIBERNATE

 

2.3 Hibernate: implementación de JPA

 

@Entity 
public class Entity 
    @Id 
    private Long id;  
    @Column(name="NAME")
    private String name;
    private int variable; 

    public Entity () {}

    //getters and setters

    @Column(name = "VALOR_DOBLE") 
    public int getVariable() { 
        return variable * 2; 
    } 
     
    public void setVariable(int variable) { 
        this.variable = variable; 
    } 
} 

UNIDAD 2: JPA VS. HIBERNATE

 

eugeniaperez.es

2.3 Hibernate: implementación de JPA

Para evitar dichos problemas utilizaremos la anotación @Access

  • Bien indicando acceso por propiedad:  AccessType.PROPERTY
  • O bien indicando acceso por variable:  AccessType.FIELD
@Embeddable
@Access(AccessType.PROPERTY)
public class Insertable { ... }
@Embeddable
@Access(AccessType.FIELD)
public class Insertable { ... }

UNIDAD 3: CONFIGURACIÓN DE HIBERNATE

 

eugeniaperez.es

3.1 Archivos de configuración 

La configuración de Hibernate puede hacerse en tres lugares:

  • Un archivo de propiedades llamado "hibernate.properties"
  • Un archivo XML llamado "hibernate.cfg.xml"
  • En código dentro de la misma aplicación

Los archivos pueden tener cualquier nombre, pero Hibernate buscará por defecto los archivos con los nombres que he mencionado, en una ubicación predeterminada 

unidad 1: arquitectura del orm

 

eugeniaperez.es

Descarga en Bitbucket

 

Descarga el proyecto jpaExample del repositorio de Bitbucket:

Usuario: 

Psswd:

URL: https://eugenia_perez@bitbucket.org/eugenia_perez/jpaexample.git

 

 

m3-uf2 persistencia con hibernate


eugeniaperez.es

FIN DE LA UNIDAD 2: JPA VS. HIBERNATE

m3-uf2 persistencia con hibernate


eugeniaperez.es

Unidad 3: Configuración de hibernate

UNIDAD 3: CONFIGURACIÓN DE HIBERNATE

 

eugeniaperez.es

3.1 Archivos de configuración 

La configuración de Hibernate puede hacerse en tres lugares:

  • Un archivo de propiedades llamado "hibernate.properties"
  • Un archivo XML llamado "hibernate.cfg.xml"
  • En código dentro de la misma aplicación

Los archivos pueden tener cualquier nombre, pero Hibernate buscará por defecto los archivos con los nombres que he mencionado, en una ubicación predeterminada 

UNIDAD 3: CONFIGURACIÓN DE HIBERNATE

 

eugeniaperez.es

3.2 El archivo hibernate.cfg.xml

El contenido mínimo:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
</hibernate-configuration>

UNIDAD 3: CONFIGURACIÓN DE HIBERNATE

 

eugeniaperez.es

3.2 El archivo hibernate.cfg.xml

  • Configuraremos un session-factory y los parámetros de conexión:
<hibernate-configuration>
<session-factory>
		<!-- Database connection settings -->
		<property
		name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property 
		name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property 
		name="connection.url">jdbc:mysql://localhost:3306/test</property>
		<property name="connection.username">test</property>
		<property name="connection.password">test</property>

		<property name="hibernate.show_sql">true</property>
		<property name="hbm2ddl.auto">create-drop</property>
</session-factory>
</hibernate-configuration>

UNIDAD 3: CONFIGURACIÓN DE HIBERNATE

 

eugeniaperez.es

3.2 El archivo hibernate.cfg.xml

  • El valor de hbm2ddl.auto  depende de la operación:
    • validate: valida el schema, no hace cambios en la BD.
    • update: actualiza el schema.
    • create: crea el schema, destruyendo la información anterior.
    • create-drop: elimina el schema al final de la sesión.

UNIDAD 3: CONFIGURACIÓN DE HIBERNATE

 

eugeniaperez.es

3.2 El archivo hibernate.cfg.xml

  • Finalmente por cada fichero de mapeo se incluirá una línea con el elemento <mapping>:
<mapping resource="mappings/Customer.hbm.xml"/>

Una vez que construyas el fichero cfg.xml lo ubicarás en la carpeta resources.

m3-uf2 persistencia con hibernate

 

eugeniaperez.es

FIN DE UNIDAD 3: Configuración de Hibernate

m3-uf2 persistencia con hibernate


eugeniaperez.es

Unidad 4: Mapeo de clases persistentes

Unidad 2 y 3

By eugenia_perez

Unidad 2 y 3

  • 1,259