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>
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.