feat(ch 8 & 9): added

This commit is contained in:
Rafa Muñoz
2025-02-16 19:47:41 +01:00
parent acb8877882
commit 1b2b2350f1
213 changed files with 96731 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
package tutorialJava.modelosBasesDeDatosComunesJPA.poblacionPorProvincias;
import java.io.Serializable;
import javax.persistence.*;
import tutorialJava.modelosBasesDeDatosComunesJPA.Entidad;
import java.util.Date;
/**
* The persistent class for the persona database table.
*
*/
@Entity
@Table(name="persona")
@NamedQuery(name="Persona.findAll", query="SELECT p FROM Persona p")
public class Persona extends Entidad implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private boolean activo;
@Column(name="apellido1")
private String primerApellido;
@Column(name="apellido2")
private String segundoApellido;
private int edad;
@Temporal(TemporalType.DATE)
private Date fechaNacimiento;
private String nombre;
//bi-directional many-to-one association to Provincia
@ManyToOne
@JoinColumn(name="idProvincia")
private Provincia provincia;
public Persona() {
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public boolean getActivo() {
return this.activo;
}
public void setActivo(boolean activo) {
this.activo = activo;
}
public String getPrimerApellido() {
return this.primerApellido;
}
public void setPrimerApellido(String primerApellido) {
this.primerApellido = primerApellido;
}
public String getSegundoApellido() {
return this.segundoApellido;
}
public void setSegundoApellido(String segundoApellido) {
this.segundoApellido = segundoApellido;
}
public int getEdad() {
return this.edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public Date getFechaNacimiento() {
return this.fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public String getNombre() {
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Provincia getProvincia() {
return this.provincia;
}
public void setProvincia(Provincia provincia) {
this.provincia = provincia;
}
}

View File

@@ -0,0 +1,78 @@
package tutorialJava.modelosBasesDeDatosComunesJPA.poblacionPorProvincias;
import java.io.Serializable;
import javax.persistence.*;
import tutorialJava.modelosBasesDeDatosComunesJPA.Entidad;
import java.util.List;
/**
* The persistent class for the provincia database table.
*
*/
@Entity
@Table(name="provincia")
@NamedQuery(name="Provincia.findAll", query="SELECT p FROM Provincia p")
public class Provincia extends Entidad implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String descripcion;
//bi-directional many-to-one association to Persona
@OneToMany(mappedBy="provincia")
private List<Persona> personas;
public Provincia() {
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getDescripcion() {
return this.descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public List<Persona> getPersonas() {
return this.personas;
}
public void setPersonas(List<Persona> personas) {
this.personas = personas;
}
public Persona addPersona(Persona persona) {
getPersonas().add(persona);
persona.setProvincia(this);
return persona;
}
public Persona removePersona(Persona persona) {
getPersonas().remove(persona);
persona.setProvincia(null);
return persona;
}
@Override
public String toString() {
return this.descripcion;
}
}

View File

@@ -0,0 +1,131 @@
package tutorialJava.modelosBasesDeDatosComunesJPA.poblacionPorProvincias.controladores;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import tutorialJava.Utils;
import tutorialJava.modelosBasesDeDatosComunesJPA.Controlador;
import tutorialJava.modelosBasesDeDatosComunesJPA.poblacionPorProvincias.Persona;
import tutorialJava.modelosBasesDeDatosComunesJPA.poblacionPorProvincias.Provincia;
public class PersonaControlador extends Controlador {
private static PersonaControlador controller = null;
public PersonaControlador() {
super(Persona.class, "PoblacionProvincial");
}
/**
*
* @return
*/
public static PersonaControlador getControlador () {
if (controller == null) {
controller = new PersonaControlador();
}
return controller;
}
/**
*
*/
public Provincia find (int id) {
return (Provincia) super.find(id);
}
/**
*
* @return
*/
public List<Persona> findAllPersonas () {
List<Persona> entities = new ArrayList<Persona>();
EntityManager em = getEntityManagerFactory().createEntityManager();
try {
Query q = em.createNativeQuery("SELECT * FROM persona", Persona.class);
entities = (List<Persona>) q.getResultList();
}
catch (NoResultException nrEx) {
}
em.close();
return entities;
}
// Arrays para generación de personas al azar
private static String nombres[] = new String[] {"Eva", "Juan", "Carmen", "Pablo", "Rafa", "Pilar", "Pedro",
"Lola", "Casimiro", "Gertrudis", "Eustaquio", "Gerarda", "Nepomunosio", "Argimira", "Ascensio", "Baltasara", "Baudilio", "Bernabea"};
private static String apellidos[] = new String[] {"Gonzalez", "Lopez", "Gutierrez", "Ruiz", "Jurado", "Carrasco", "Flores",
"Sanchez", "Bose", "Martin", "Martinez", "Santos", "Pozo", "Quijano", "Romero", "Pisano", "Cuevas", "Sanz"};
/**
*
*/
public static void inicializaDatosEnTabla () {
int personasPorProvincia = 100;
// Para cada provincia, eliminaré a las personas creadas y crearé nuevas
PersonaControlador.getControlador().deleteAll();
List<Provincia> provincias = ProvinciaControlador.getControlador().findAllProvincias();
for (Provincia provincia : provincias) {
for (int i = 0; i < 100; i++) {
Persona persona = new Persona();
persona.setNombre(getStringAlAzar(nombres));
persona.setPrimerApellido(getStringAlAzar(apellidos));
persona.setSegundoApellido(getStringAlAzar(apellidos));
persona.setProvincia(provincia);
persona.setFechaNacimiento(getFechaAzar(1900, 2019));
persona.setEdad(calculaEdad(persona.getFechaNacimiento()));
persona.setActivo( (Utils.obtenerNumeroAzar(0, 100) <= 50)? true : false );
PersonaControlador.getControlador().persist(persona);
}
}
}
/**
*
* @param strings
* @return
*/
private static String getStringAlAzar (String strings[]) {
return strings[Utils.obtenerNumeroAzar(0, strings.length - 1)];
}
/**
*
* @return
*/
private static Date getFechaAzar (int anioMin, int anioMax) {
Calendar calendar = new GregorianCalendar(Utils.obtenerNumeroAzar(anioMin, anioMax) /*año*/, Utils.obtenerNumeroAzar(0, 11) /*mes*/, Utils.obtenerNumeroAzar(1, 31) /*día*/);
return calendar.getTime();
}
/**
*
* @return
*/
private static int calculaEdad (Date fechaNacimiento) {
return (int) ChronoUnit.YEARS.between(fechaNacimiento.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
}
}

View File

@@ -0,0 +1,93 @@
package tutorialJava.modelosBasesDeDatosComunesJPA.poblacionPorProvincias.controladores;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import tutorialJava.modelosBasesDeDatosComunesJPA.Controlador;
import tutorialJava.modelosBasesDeDatosComunesJPA.poblacionPorProvincias.Provincia;
public class ProvinciaControlador extends Controlador {
private static ProvinciaControlador controller = null;
public ProvinciaControlador() {
super(Provincia.class, "PoblacionProvincial");
}
/**
*
* @return
*/
public static ProvinciaControlador getControlador () {
if (controller == null) {
controller = new ProvinciaControlador();
}
return controller;
}
/**
*
*/
public Provincia find (int id) {
return (Provincia) super.find(id);
}
/**
*
* @return
*/
public List<Provincia> findAllProvincias () {
List<Provincia> entities = new ArrayList<Provincia>();
EntityManager em = getEntityManagerFactory().createEntityManager();
try {
Query q = em.createNativeQuery("SELECT * FROM provincia", Provincia.class);
entities = (List<Provincia>) q.getResultList();
}
catch (NoResultException nrEx) {
}
em.close();
return entities;
}
/**
*
*/
public static void inicializaDatosEnTabla () {
String nombresProvincias[] = new String[] {"Álava", "Albacete", "Alicante", "Almería", "Asturias", "Ávila", "Badajoz",
"Barcelona", "Burgos", "Cáceres", "Cádiz", "Cantabria", "Castellón", "Ciudad Real", "Córdoba", "Cuenca", "Gerona",
"Granada", "Guadalajara", "Guipúzcoa", "Huelva", "Huesca", "Islas Baleares", "Jaén", "La Coruña", "La Rioja",
"Las Palmas", "León", "Lérida", "Lugo", "Madrid", "Málaga", "Murcia", "Navarra", "Orense", "Palencia", "Pontevedra",
"Salamanca", "Segovia", "Sevilla", "Soria", "Tarragona", "Tenerife", "Teruel", "Toledo", "Valencia", "Valladolid",
"Vizcaya", "Zamora", "Zaragoza"};
Provincia entidades[] = new Provincia[nombresProvincias.length];
// Tenemos 50 provincias, si no se llega a tener todas, se eliminan los datos de la BBDD y se crea nuevamente
if (ProvinciaControlador.getControlador().findAll().size() != 50) {
// Elimino los datos de personas y después los de provincias
PersonaControlador.getControlador().deleteAll();
ProvinciaControlador.getControlador().deleteAll();
// Recorro el array de Strings, dando de alta entidades en la tabla
for (String nombreProvincia : nombresProvincias) {
Provincia provincia = new Provincia();
provincia.setDescripcion(nombreProvincia);
ProvinciaControlador.getControlador().persist(provincia);
}
}
}
}