En este nuevo ejemplo, vamos a realizar una práctica de JPA con más
complejidad. El objeto será conseguir el adecuado funcionamiento e interrelación de tres tablas diferentes. Para ello propongo realizar el mapeo de una hipotética aplicación de nóminas.
La arquitectura y
tecnologías del proyecto serán las siguientes:
·
JavaSE
1.7
·
Eclipse
·
MySql
5
·
HibernateJPA
2.0
En un análisis simple, podemos observar que en una
nómina aparecen dos objetos "físicos" mapeables: por un lado el empleado en sí, y por otro lado el
pago de la nómina del mes correspondiente. Eso implica que cada trabajador tendrá una
nómina cada mes, y que en cada nómina aparece un trabajador. Cada trabajador
tendrá sus datos personales y datos profesionales.
Con esa información, y con
fines didácticos, contamos con la siguiente información de base de datos.En la base de datos mysql tenemos las siguientes tres
tablas en la DDBB "nominaDB":
Contando
con esta información, y analizando las relaciones que puede haber entre las
tres tablas, procedemos a confeccionar nuestros ficheros models JPA, con sus
correspondientes anotaciones.
MAPEO JPA DE LA TABLAS
1.- Mapeo de la tabla empleados
@Entity
@Table(name="empleados")
public class Empleado implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_empleados")
private long idEmpleados;
// relacion con la tabla
datosProfesionales
@OneToOne(cascade={CascadeType.PERSIST,CascadeType.REMOVE},orphanRemoval=true)
@JoinColumn(name="id_datosprofesionales")
private Datosprofesionales profs;
// datos del empleado
@Column(name="nombre",nullable=false)
private String nombre;
@Column(name="dni",nullable=false)
private String dni;
@Column(name="segsocial",nullable=false)
private String segsocial;
// datos de la direccion
del empleado
@Column(name="direccion",nullable=false)
private String direccion;
@Column(name="localidad",nullable=false)
private String localidad;
@Column(name="codpostal",nullable=false)
private String codpostal;
// datos familiares del
empleado y fiscalidad
@Column(name="situacionfamiliar",nullable=false)
private int situacionfamiliar;
@Column(name="num_hijos",nullable=false)
private int numHijos;
@Column(name="retencion",nullable=false)
private float retencion;
// datos bancarios del
empleado
@Column(name="iban")
private String iban;
// relacion con la tabla
Nomina
// esta relacion no se
mapea en DDBB
@OneToMany(mappedBy="idEmpleado", fetch = EAGER)
private List<Nomina>nominas;
public Empleado() {
}
public Empleado(Datosprofesionales
profs, String nombre, String dni,
String
segsocial, String direccion, String localidad, String
codpostal, int situacionfamiliar, int numHijos, float retencion, String iban) {
this.profs = profs;
this.nombre = nombre;
this.dni = dni;
this.segsocial = segsocial;
this.direccion = direccion;
this.localidad = localidad;
this.codpostal = codpostal;
this.situacionfamiliar = situacionfamiliar;
this.numHijos = numHijos;
this.retencion = retencion;
this.iban = iban;
}
@Override
public String toString() {
return "Empleado: "+getNombre()+" - DNI: "+getDni()+" - Puesto trabajo: "+getProfs().getTipo()+" - Centro: "+getProfs().getCentro();
}
// AÑADIR GETTERS AND SETTERS
}
Continuará...

No hay comentarios:
Publicar un comentario