====== Claves Primarias y Tipos de datos ====== En esta unidad vamos a generar automáticamente las claves primarias, crear componentes de Hibernate y añadir enumerados. En los ejercicios de esta unidad se van a usar la siguientes clases Java (entidades). class Seguro Seguro : int idSeguro Seguro : NIF nif Seguro : String nombre Seguro : String ape1 Seguro : String ape2 Seguro : int edad Seguro : Sexo sexo Seguro : boolean casado Seguro : int numHijos Seguro : boolean embarazada Seguro : Coberturas coberturas Seguro : Enfermedades enfermedades Seguro : Date fechaCreacion class Coberturas Coberturas : boolean oftalmologia Coberturas : boolean dental Coberturas : boolean fecundacionInVitro class Enfermedades Enfermedades: boolean corazon Enfermedades: boolean estomacal Enfermedades: boolean rinyones Enfermedades: boolean alergia Enfermedades: String nombreAlergia class NIF NIF:nif class Sexo <> Sexo : Hombre Sexo : Mujer class AsistenciaMedica AsistenciaMedica: int idAsistenciaMedica AsistenciaMedica: Seguro seguro AsistenciaMedica: String breveDescripcion AsistenciaMedica: String lugar AsistenciaMedica: String explicacion AsistenciaMedica: TipoAsistencia tipoAsistencia AsistenciaMedica: Date fecha AsistenciaMedica: Date hora AsistenciaMedica: BigDecimal importe class TipoAsistencia <> TipoAsistencia : Hospitalaria TipoAsistencia : Ambulatoria TipoAsistencia : CentroSalud TipoAsistencia : Domiciliaria Coberturas "1"-"1" Seguro NIF "1"--"1" Seguro Sexo "1" -- "*" Seguro Seguro "1"-"1" Enfermedades Seguro "1"--"*" AsistenciaMedica AsistenciaMedica "*" - "1" TipoAsistencia El modelo de tablas asociado a las entidades es el siguiente: class Seguro <> Seguro : INTEGER idSeguro Seguro : VARCHAR nif Seguro : VARCHAR nombre Seguro : VARCHAR ape1 Seguro : VARCHAR ape2 Seguro : INTEGER edad Seguro : INTEGER sexo Seguro : TINYINT casado Seguro : INTEGER numHijos Seguro : TINYINT embarazada Seguro : TINYINT oftalmologia Seguro : TINYINT dental Seguro : TINYINT fecundacionInVitro Seguro : TINYINT corazon Seguro : TINYINT estomacal Seguro : TINYINT rinyones Seguro : TINYINT alergia Seguro : VARCHAR nombreAlergia Seguro : TIMESTAMP fechaCreacion class AsistenciaMedica <
> AsistenciaMedica : INTEGER IdAsistenciaMedica AsistenciaMedica : INTEGER IdSeguro AsistenciaMedica : VARCHAR breveDescripcion AsistenciaMedica : VARCHAR lugar AsistenciaMedica : TEXT explicacion AsistenciaMedica : VARCHAR TipoAsistencia AsistenciaMedica : DATE fecha AsistenciaMedica : TIME hora AsistenciaMedica : DECIMAL(10,2) importe AsistenciaMedica : INTEGER idx Seguro "1" -- "*" AsistenciaMedica ===== Ejercicio01 ===== Modifica el **Ejercicio01** de la unidad anterior para incluir las siguientes tareas: Siguiendo el diagrama de clases Java anterior: * Crea el enumerado ''TipoAsistencia'' y sus valores * Crea el enumerado ''Sexo'' y sus valores * Crea la clase ''NIF'' , su propiedad y los métodos //get/set// * Crea la clase ''Coberturas'' , sus propiedades y los métodos //get/set// * Crea la clase ''Enfermedades'' , sus propiedades y los métodos //get/set// * Modifica la clase ''Seguro'' para incluir las nuevas propiedades y los nuevos métodos //get/set// * En la clase ''Seguro'' haz que la propiedad ''nif'' sea del tipo ''NIF'' pero que en Hibernate sea un componente en vez de una nueva entidad. * Haz que las propiedades ''enfermedades'' y ''coberturas'' sean componentes de la clase ''Seguro''. * Modifica la clase ''AsistenciaMedica'' para incluir las nuevas propiedades y los nuevos métodos //get/set// * Modifica la configuración de Hibernate de las clases ''Seguro'' y ''AsistenciaMedica'' para indicar a Hibernate que la base de datos genera automáticamente las claves primarias usando un autonumérico. * Haz que en la propiedad ''fecha'' de la clase ''AsistenciaMedica'' solo se guarde la fecha y **no** la hora. * Haz que en la propiedad ''hora'' de la clase ''AsistenciaMedica'' solo se guarde la hora y **no** la fecha. * Haz que en la propiedad ''explicacion'' de la clase ''AsistenciaMedica'' se puedan guardar más de 255 caracteres. * Haz que en la propiedad ''importe'' de la clase ''AsistenciaMedica'' se guarde como un ''BigDecimal''. * Al configurar los enumerados ten en cuenta el tipo de datos que se ha definido en la base de datos. Para ello usa los ficheros "''.hbm.xml''" de Hibernate. La clase ''Main'' deberá incluir el siguiente código de creación de los distintos objetos: SimpleDateFormat sdfFecha=new SimpleDateFormat("dd/MM/yyyy"); sdfFecha.setLenient(false); SimpleDateFormat sdfHora=new SimpleDateFormat("HH:mm:ss"); sdfHora.setLenient(false); Seguro seguro = new Seguro(new Nif("36254784E"), "Rosa", "Ramirez", "Arellano", 41, Sexo.Mujer, true, 1, false, new Coberturas(false, true, false), new Enfermedades(true, false, true, false, null), new Date()); AsistenciaMedica asistenciaMedica1 = new AsistenciaMedica(seguro, "Golpe en el brazo", "Madrid", "Fractura del radio derecho de la mano debido a golpe contundente con el suelo. Se escayola el brazo", TipoAsistencia.Hospitalaria, sdfFecha.parse("31/12/2013"),sdfHora.parse("11:21:45"), new BigDecimal("700.31")); AsistenciaMedica asistenciaMedica2 = new AsistenciaMedica(seguro, "Fiebre alta", "Alzira", "El paciente presenta cuadro alto de fiabre con deficultad para respirar. Se recetan antibioticos.", TipoAsistencia.Ambulatoria, sdfFecha.parse("27/02/2013"), sdfHora.parse("12:34:16"), new BigDecimal("81.14")); seguro.getAsistenciasMedicas().add(asistenciaMedica1); seguro.getAsistenciasMedicas().add(asistenciaMedica2); Ahora añade a la clase ''Main'' el código de hibernate necesario para que al guardar el objeto ''seguro'' se guarde todo en la base de datos. ===== Ejercicio02 ===== Modifica el **Ejercicio02** de la unidad anterior para incluir las siguientes tareas: Siguiendo el diagrama de clases Java anterior: * Crea el enumerado ''TipoAsistencia'' y sus valores * Crea el enumerado ''Sexo'' y sus valores * Crea la clase ''NIF'' , su propiedad y los métodos //get/set// * Crea la clase ''Coberturas'' , sus propiedades y los métodos //get/set// * Crea la clase ''Enfermedades'' , sus propiedades y los métodos //get/set// * Modifica la clase ''Seguro'' para incluir las nuevas propiedades y los nuevos métodos //get/set// * En la clase ''Seguro'' haz que la propiedad ''nif'' sea del tipo ''NIF'' pero que en Hibernate sea un componente en vez de una nueva entidad. * Haz que las propiedades ''enfermedades'' y ''coberturas'' sean componentes de la clase ''Seguro''. * Modifica la clase ''AsistenciaMedica'' para incluir las nuevas propiedades y los nuevos métodos //get/set// * Modifica la configuración de Hibernate de las clases ''Seguro'' y ''AsistenciaMedica'' para indicar a Hibernate que la base de datos genera automáticamente las claves primarias usando un autonumérico. * Haz que en la propiedad ''fecha'' de la clase ''AsistenciaMedica'' solo se guarde la fecha y **no** la hora. * Haz que en la propiedad ''hora'' de la clase ''AsistenciaMedica'' solo se guarde la hora y **no** la fecha. * Haz que en la propiedad ''explicacion'' de la clase ''AsistenciaMedica'' se puedan guardar más de 255 caracteres. * Haz que en la propiedad ''importe'' de la clase ''AsistenciaMedica'' se guarde como un ''BigDecimal''. * Al configurar los enumerados ten en cuenta el tipo de datos que se ha definido en la base de datos. Para ello usa las anotaciones de JPA. La clase ''Main'' deberá incluir el siguiente código de creación de los distintos objetos: SimpleDateFormat sdfFecha=new SimpleDateFormat("dd/MM/yyyy"); sdfFecha.setLenient(false); SimpleDateFormat sdfHora=new SimpleDateFormat("HH:mm:ss"); sdfHora.setLenient(false); Seguro seguro = new Seguro(new Nif("48573562T"), "Sara", "Tomas", "Martínez", 31, Sexo.Mujer, true, 1, true, new Coberturas(true, true, true), new Enfermedades(false, true, false, true, "Acaros"), new Date()); AsistenciaMedica asistenciaMedica1 = new AsistenciaMedica(seguro, "Operación de miopía", "Barcelona", "El paciente es operado de miopía en los dos ojos.", TipoAsistencia.Hospitalaria, sdfFecha.parse("18/04/2013"),sdfHora.parse("08:30:00"), new BigDecimal("10400.20")); AsistenciaMedica asistenciaMedica2 = new AsistenciaMedica(seguro, "Analisis de alergia", "Alzira", "Se realizan analisis de sangre para determinar el tipo de alergia que padece el paciente.", TipoAsistencia.Ambulatoria, sdfFecha.parse("12/02/2012"), sdfHora.parse("18:30:00"), new BigDecimal("31.15")); seguro.getAsistenciasMedicas().add(asistenciaMedica1); seguro.getAsistenciasMedicas().add(asistenciaMedica2); Ahora añade a la clase ''Main'' el código de hibernate necesario para que al guardar el objeto ''seguro'' se guarde todo en la base de datos.