Diferencia entre revisiones de «Practicas con Hibernate»
(→Entidades) |
(→Uno a Muchos) |
||
| (No se muestran 7 ediciones intermedias del mismo usuario) | |||
| Línea 1: | Línea 1: | ||
| − | En este apartado mostraremos diferentes ejemplos de uso de hibernate, usando de prueba un proyecto [[Hibernate Annotations con Spring | | + | En este apartado mostraremos diferentes ejemplos de uso de hibernate, usando de prueba un proyecto que utiliza [[Hibernate Annotations con Spring | hibernate y spring]], que podemos descargar del repositorio de google [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/#svn%2Fhibernate-sandbox%2Ftrunk aquí] |
== Cardinalidad entre entidades == | == Cardinalidad entre entidades == | ||
| Línea 64: | Línea 64: | ||
name="cuerpoId", unique=true, nullable=false, updatable=false) | name="cuerpoId", unique=true, nullable=false, updatable=false) | ||
private Cuerpo cuerpo; | private Cuerpo cuerpo; | ||
| + | </code> | ||
| + | |||
| + | ==== DAO ==== | ||
| + | '''CuerpoDao''' | ||
| + | <code java> | ||
| + | @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); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </code> | ||
| + | '''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. | ||
| + | |||
| + | === Uno a Muchos === | ||
| + | ==== Entidades ==== | ||
| + | Ej.: Una persona con muchos apodos | ||
| + | |||
| + | '''Persona''' | ||
| + | <code java5> | ||
| + | @Entity | ||
| + | @Table(name = "Persona", schema = "UnoAMuchos") | ||
| + | public class Persona { | ||
| + | @Id | ||
| + | @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| + | @Column(name = "personaId") | ||
| + | private Long id; | ||
| + | |||
| + | /** | ||
| + | * descripcion | ||
| + | */ | ||
| + | @Column(name = "personaNombre") | ||
| + | private String nombre; | ||
| + | |||
| + | @OneToMany(cascade=CascadeType.ALL, mappedBy="persona") | ||
| + | private Collection<Apodo> apodos; | ||
| + | //Getter and Setter | ||
| + | ... | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Con la siguiente anotación decimos que la persona posee una colección de apodos, y cada apodo esta relacionada a la persona mediante el atributo persona. | ||
| + | <code java> | ||
| + | @OneToMany(cascade=CascadeType.ALL, mappedBy="persona") | ||
| + | private Collection<Apodo> apodos; | ||
| + | </code> | ||
| + | |||
| + | |||
| + | '''Persona''' | ||
| + | <code java5> | ||
| + | @Entity | ||
| + | @Table(name = "Apodo", schema = "UnoAMuchos") | ||
| + | public class Apodo { | ||
| + | @Id | ||
| + | @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| + | @Column(name = "apodoId") | ||
| + | /** | ||
| + | * Identificador del apodo. | ||
| + | */ | ||
| + | private Long id; | ||
| + | |||
| + | /** | ||
| + | * descripcion | ||
| + | */ | ||
| + | @Column(name = "apodoDescripcion") | ||
| + | private String descripcion; | ||
| + | |||
| + | @ManyToOne | ||
| + | @JoinColumn(name = "personaId") | ||
| + | private Persona persona; | ||
| + | |||
| + | //Getter and Setter | ||
| + | ... | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Con la siguiente anotación decimos que el apodo pertenece al la entidad persona, y es uno de muchos apodos que puede tener la persona. | ||
| + | <code java> | ||
| + | @OneToMany(cascade=CascadeType.ALL, mappedBy="persona") | ||
| + | private Collection<Apodo> apodos; | ||
</code> | </code> | ||
| Línea 70: | Línea 164: | ||
* [[Hibernate Con Spring]] | * [[Hibernate Con Spring]] | ||
* [[Hibernate Annotations con Spring]] | * [[Hibernate Annotations con Spring]] | ||
| + | * [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/#svn%2Fhibernate-sandbox%2Ftrunk Ejemplos de hibernate] | ||
Revisión actual del 12:59 12 abr 2012
En este apartado mostraremos diferentes ejemplos de uso de hibernate, usando de prueba un proyecto que utiliza hibernate y spring, que podemos descargar del repositorio de google aquí
Contenido
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.
Uno a Muchos
Entidades
Ej.: Una persona con muchos apodos
Persona
@Entity
@Table(name = "Persona", schema = "UnoAMuchos")
public class Persona {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "personaId")
private Long id;
/**
* descripcion
*/
@Column(name = "personaNombre")
private String nombre;
@OneToMany(cascade=CascadeType.ALL, mappedBy="persona")
private Collection<Apodo> apodos;
//Getter and Setter
...
}
Con la siguiente anotación decimos que la persona posee una colección de apodos, y cada apodo esta relacionada a la persona mediante el atributo persona.
@OneToMany(cascade=CascadeType.ALL, mappedBy="persona")
private Collection<Apodo> apodos;
Persona
@Entity
@Table(name = "Apodo", schema = "UnoAMuchos")
public class Apodo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "apodoId")
/**
* Identificador del apodo.
*/
private Long id;
/**
* descripcion
*/
@Column(name = "apodoDescripcion")
private String descripcion;
@ManyToOne
@JoinColumn(name = "personaId")
private Persona persona;
//Getter and Setter ...
}
Con la siguiente anotación decimos que el apodo pertenece al la entidad persona, y es uno de muchos apodos que puede tener la persona.
@OneToMany(cascade=CascadeType.ALL, mappedBy="persona")
private Collection<Apodo> apodos;