miércoles, 22 de julio de 2015

Mapeo complejo JPA de tablas relacionadas - I

Hola de nuevo, jabatos:

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