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