Practicas con Hibernate

De Dos Ideas.
Saltar a: navegación, buscar

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);
   }

} Nota: Dado que en los ejemplos solamente estamos analizando la capa de Dao's, los anotaremos como @Transactional para que cada método finalice su transacción y faciliten los test.

Ver también