Practicas con Hibernate
En este apartado mostraremos diferentes ejemplos de uso de hibernate, usando de prueba un proyecto con hibernate más spring que podemos descargar del repositorio de google aquí
Cardinalidad entre entidades
Uno a Uno
Entidades
Ej.: Un cuerpo esta compuesto por un corazón
Cuerpo
@Entity
@Table(name = "Cuerpo", schema = "UnoAUno")
public class Cuerpo {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "cuerpoId") private Long id;
@Column(name = "cuerpoDescripcion") private String descripcion; @OneToOne(mappedBy = "cuerpo", cascade = CascadeType.ALL) private Corazon corazon; //Getter and Setter ...
}
Con la siguiente anotación decimos que el cuerpo posee una relación con la entidad corazón; y en la entidad corazón la relación esta dado por el atributo cuerpo.
@OneToOne(mappedBy = "cuerpo", cascade = CascadeType.ALL)
private Corazon corazon;
Corazón
@Entity
@Table(name = "Corazon", schema = "UnoAUno")
public class Corazon {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "corazonId") private Long id;
@OneToOne(optional=false) @JoinColumn( name="cuerpoId", unique=true, nullable=false, updatable=false) private Cuerpo cuerpo;
@Column(name = "corazonDescripcion") private String descripcion;
//Getter and Setter ...
}
Con la siguiente anotación decimos que el corazon esta relacionado uno a uno con el cuerpo y la existencia de este último es obligatoria (optional=false).
Además, en caso de que este relacionado por una FK, definimos que el Join, lo realice utilizando la FK.
@OneToOne(optional=false) @JoinColumn( name="cuerpoId", unique=true, nullable=false, updatable=false) private Cuerpo cuerpo;
DAO
CuerpoDao
@Repository
@Transactional
public class CuerpoDaoImpl implements CuerpoDao {
@Autowired private SessionFactory sessionFactory; public Cuerpo buscarPorId(Long id) { return (Cuerpo) sessionFactory.getCurrentSession().get(Cuerpo.class, id); }
public void guardar(Cuerpo cuerpo) { sessionFactory.getCurrentSession().save(cuerpo); }
public void eliminar(Cuerpo cuerpo) { sessionFactory.getCurrentSession().delete(cuerpo); }
}