jueves, 7 de septiembre de 2017

Tutorial: comunicación entre Java y una base de datos H2 (con ejemplos): Parte 3 - Hibernate con Anotaciones

Hibernate, a pesar de sus ventajas, era bastante aparatoso. Todos estos ficheros XML de mapping, los DAO, la realización de DAO...Se te quitan hasta las ganas de escribir código. En la última parte hemos creado un proyecto con Hibernate y hemos visto todo el jaleo q se lleva Hibernate.

Los creadores de Hibernate tb se han dado cuenta de lo aparatoso q era y han venido con una idea fantástica: para que crear los ficheros especiales de mapping elos DAO, donde "mapeamos" nuestra BD (y básicamente duplicamos la información sobre nuestra BD), si podemos simplemente escribir los nombres de las columnas encima los campos en los ficheros de entity:


La información que estaba en DAO y los ficheros Mapping viene metida cómodamente en los ficheros "entity" en forma de las anotaciones:



@Entity
@Table(name = "ADDRESS")
public class Address{
 
    @Id    @Column(name = "id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @Column(name = "CITY")
    private String city;
    @Column(name = "COUNTRY")
    private String country;
    @Column(name = "POST_CODE", length = 10)
    private String postCode;
    @Column(name = "STREET")
    private String street;

El fichero hibernate.cfg.xml pierde tb la indicación sobre el mapping XML:
<!-- List of XML mapping files -->
<mapping resource="mapping/Address.hbm.xml"/>
<mapping resource="mapping/Employee.hbm.xml"/>
<mapping resource="mapping/Project.hbm.xml"/>

y en cambio recibe el mapping en las clases Entity (q ya estaban alli desde el ultimo proyecto, pero hemos puesto las anotaciones por encima):

<!-- List of Entity mapping files -->
<mapping class="entity.Address"/>
<mapping class="entity.Employee"/>
<mapping class="entity.Project"/>

El resto queda como era antes. La estructura de nuestra aplicación se ha hecho mucho mas compacta.
Nuestros tests siguien ejecutandose con éxito:

Session session = HibernateUtil.getSessionFactory().openSession();

session.beginTransaction();

Address address = new Address();
address.setCountry("DC");
address.setCity("Gotham City");
address.setStreet("Arkham street 1");
address.setPostCode("0987");


Employee employee = new Employee();
employee.setFirstName("James");
employee.setLastName("Gordon");

Calendar calendar = Calendar.getInstance();
calendar.set(1939, Calendar.MAY, 1);

employee.setBirthday(new Date(calendar.getTime().getTime()));
employee.setAddress(address);

Project project = new Project();
project.setTitle("5678");

Set<Project> projects = new HashSet<Project>();
projects.add(project);
employee.setProjects(projects);

session.save(address);
session.save(employee);
session.save(project);

session.getTransaction().commit();
HibernateUtil.shutdown();

Resultados:


Voy pegar otra vez la esquema de la BD:




Resumen.
Hibernate se ha hecho mas compacto con anotaciones. Pero eso no es el final. Los pode

El codigo puedes encontrar aqui: https://github.com/cyberglad/TutorialHibernateAnnotations

No hay comentarios:

Publicar un comentario