Configuración por anotaciones

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Creamos el fichero hibernate.cfg.xml en la carpeta src y le pegamos el siguiente código:

<?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>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.isolation">2</property>
<property name="hibernate.connection.password">pp</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/prueba</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.current_session_context_class">managed</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL57Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>

DDL automático

  • update → cada vez que arranquemos el servidor, se comprobará si hay cambios en las entidades de hibernate y si es así, se actualizará la base de datos en función de dichos cambios (en caso de que sea posible)
  • create_drop → cada vez que arranquemos el servidor se creará la base datos y se borrará al detenerlo
  • create → recrea la base de datos al arrancar, borrando lo que había
  • validate → comprueba que lo que tengo en la aplicación corresponde a lo que hay en la base de datos y si no es así, lanza un error

Si no pones el property, no se ejecuta ninguna acción.

hibernate.cfg.xml:
<property name="hbm2ddl.auto">create</property>

Creamos el fichero HibernateUtil.java para establecer la conexión

public class HibernateUtil {
	private static StandardServiceRegistry registry;
	private static SessionFactory sessionFactory;

	public static SessionFactory getSessionFactory() {
		if (sessionFactory == null) {
			try {
				registry = new StandardServiceRegistryBuilder().configure().build();
				MetadataSources sources = new MetadataSources(registry);
				sources.addAnnotatedClass(Libro.class);
				sources.addAnnotatedClass(Autor.class);
				Metadata metadata = sources.getMetadataBuilder().build();
				sessionFactory = metadata.getSessionFactoryBuilder().build();
			} catch (Exception e) {
				e.printStackTrace();
				if (registry != null) {
					StandardServiceRegistryBuilder.destroy(registry);
				}
			}
		}
		return sessionFactory;
	}
}

Las entities

@Entity
// Anotación opcional, permite especificar el nombre de la tabla vinculada a esta entidad en la base de datos
// @Table(name = "autorcillo")  
public class Autor {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)//Para generar números autoincrementados
	private int id;
	
	//Anotación opcional, permite easpecificar el nombre d ela tabla en la base de datos, los caracteres que tendrá y si acepta valores nulos
	//@Column (name = "nombrecillo", length = 100, nullable = true)
	private String nombre;
	
	// mappedBy especifica el atributo de la entidad vinculada con el que estamos estableciendo esta relacion.
	//Si no lo ponemos se gererará una tabla auxiliar.
	// CascadeType.ALL: Los datos se borrarán y se salvarán en cascada
	// orphanRemoval: si borro en cascada y queda algún registro hijo sin padre, cárgatelos también
	// eager = carga ansiosa 
	@OneToMany (mappedBy = "autor", cascade = {CascadeType.ALL}, orphanRemoval = true, fetch = FetchType.EAGER) 
	private Set<Libro> libros;

	// Los getters y setters
}
@Entity
public class Libro {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) // Para generar números autoincrementados
	private int id;
	private String titulo;
	private int precio;
	@ManyToOne
	// Anotación opcional, permite especificar el nombre de la join column
	// @JoinColumn (name = "autor_id")
	private Autor autor;

	// ... los getters y setters
}

Para probar nuestra configuración, crearemos una clase Main, con el código indicado en la lección Probando la configuración con una transacción.

Generación de getters y setters con Lombok

Podemos getionar la generación automática de getters y setters en nuestras entidades utilizando las anotaciones de Lombok.

Pasos en su implementación.

1. Debemos tener incluída la dependencia correspondiente en nuestro pom.xml.

2. Añadimos las siguientes anotaciones a la entidad. Esto genera automáticamente getters y setters para todas las propiedades.

@Getter @Setter
@Entity
public class Libro {

3. Ejecutamos el jar correspondiente a lombok que se habrá instalado a través de maven.

Configuración por anotaciones 1

4. En un momento de instalación se nos pregunta por la ubicación de nuestra instalación de Eclipse. Si la herramienta no lo detectase, deberemos especificar la ubicación manualmente.

5. A partir de ahora, podremos usar las anotaciones @Getter y @Setter para generar los getters y setters.

← Instalación (pasos comunes para configuración por anotaciones y XML)
Configuración por XML →