Skip to content

auto tema4

Elizabeth Izquierdo edited this page Oct 6, 2026 · 5 revisions

🧠 Autoevaluación — Herencia en Java y BD (AlumnoVO/AlumnoDAO)

Responde cada pregunta antes de ver la respuesta.


Pregunta 1

¿Cómo se implementa la herencia en Java entre PersonaVO y AlumnoVO?

  • A) AlumnoVO implements PersonaVO
  • B) AlumnoVO = new PersonaVO()
  • C) AlumnoVO uses PersonaVO
  • D) AlumnoVO extends PersonaVO
Ver respuesta

✅ D) AlumnoVO extends PersonaVO

💡 Con extends, AlumnoVO hereda todos los atributos y métodos de PersonaVO (como codigo y nombre) y puede agregar los suyos propios (como telefono). Es la herencia de clases en Java.


Pregunta 2

¿Cómo se modela la herencia Persona → Alumno en la base de datos?

  • A) Con una única tabla alumnos que tiene todos los campos de persona y alumno
  • B) Con una tabla personas que tiene una columna tipo para distinguir personas de alumnos
  • C) Con dos tablas: personas (datos comunes) y alumnos (datos específicos), donde alumnos.codigo es PK y FK que referencia a personas.codigo
  • D) Con una vista (VIEW) de MySQL que combina los datos
Ver respuesta

✅ C) Con dos tablas: personas (datos comunes) y alumnos (datos específicos), donde alumnos.codigo es PK y FK que referencia a personas.codigo

💡 Este es el patrón "Herencia de Tabla Dividida". La clave primaria de alumnos es también la clave foránea a personas, garantizando que todo alumno sea también una persona.


Pregunta 3

¿Por qué el método agregarAlumno() en el AlumnoDAO necesita hacer DOS INSERTs?

  • A) Porque hay que insertar dos veces por seguridad en caso de fallo
  • B) Porque primero inserta los datos comunes en la tabla personas y luego los datos específicos en la tabla alumnos
  • C) Porque MySQL requiere dos comandos separados para cualquier inserción
  • D) Porque el primer INSERT es de prueba y el segundo es el definitivo
Ver respuesta

✅ B) Porque primero inserta los datos comunes en la tabla personas y luego los datos específicos en la tabla alumnos

💡 Como los datos están en dos tablas, hay que hacer dos INSERTs: primero en personas (nombre, etc.) y luego en alumnos (telefono, el mismo código como FK). Ambos deben ejecutarse como una transacción atómica.


Pregunta 4

¿Por qué se necesita una transacción JDBC al agregar un alumno?

  • A) Para que la inserción sea más rápida
  • B) Para poder hacer los dos INSERTs en paralelo
  • C) Porque MySQL no acepta dos INSERTs sin transacción
  • D) Para que si el INSERT en personas tiene éxito pero el INSERT en alumnos falla, se revierta el primero (atomicidad)
Ver respuesta

✅ D) Para que si el INSERT en personas tiene éxito pero el INSERT en alumnos falla, se revierta el primero (atomicidad)

💡 Sin transacción, podría quedar una persona en la tabla personas sin su entrada en alumnos, dejando la BD en un estado inconsistente. La transacción garantiza "todo o nada".


Pregunta 5

¿Qué hace ON DELETE CASCADE en la FK de la tabla alumnos?

  • A) Cuando se elimina una persona de la tabla personas, elimina automáticamente su registro en alumnos
  • B) Elimina automáticamente todos los alumnos al borrar la base de datos
  • C) Impide eliminar personas que tengan alumnos asociados
  • D) Crea una copia de seguridad antes de eliminar
Ver respuesta

✅ A) Cuando se elimina una persona de la tabla personas, elimina automáticamente su registro en alumnos

💡 ON DELETE CASCADE mantiene la integridad referencial automáticamente. Sin él, intentar eliminar una persona que tiene una fila en alumnos daría un error de FK. Con CASCADE, MySQL borra ambos registros.


Pregunta 6

¿Qué tipo de SQL se usa para mostrar la lista de alumnos con sus datos de persona?

  • A) Un SELECT de la tabla alumnos solamente
  • B) Un JOIN entre personas y alumnos para combinar los datos de ambas tablas
  • C) Dos SELECTs separados, uno por tabla
  • D) Un UNION entre las dos tablas
Ver respuesta

✅ B) Un JOIN entre personas y alumnos para combinar los datos de ambas tablas

💡 Para mostrar el nombre (de personas) junto con el teléfono (de alumnos), se usa SELECT p.nombre, a.telefono FROM personas p JOIN alumnos a ON p.codigo = a.codigo. El JOIN combina las filas relacionadas.


Pregunta 7

¿Qué hace connection.setAutoCommit(false) antes de los dos INSERTs?

  • A) Deshabilita la autocompleción de SQL en el editor
  • B) Hace que la conexión sea de solo lectura
  • C) Desactiva el modo en que cada operación SQL se confirma automáticamente, agrupando los INSERTs en una transacción que se confirma juntos con commit()
  • D) Configura la conexión para usar el protocolo SSL
Ver respuesta

✅ C) Desactiva el modo en que cada operación SQL se confirma automáticamente, agrupando los INSERTs en una transacción que se confirma juntos con commit()

💡 Por defecto, JDBC ejecuta y confirma cada operación inmediatamente (auto-commit). Con setAutoCommit(false), las operaciones quedan pendientes hasta llamar a commit() (éxito) o rollback() (fallo).


Pregunta 8

¿Cuál es el orden correcto para insertar un alumno con transacción JDBC?

  • A) setAutoCommit(false) → INSERT personas → INSERT alumnos → commit → (catch: rollback)
  • B) INSERT alumnos → INSERT personas → commit
  • C) commit → INSERT personas → INSERT alumnos → setAutoCommit(true)
  • D) INSERT personas → commit → INSERT alumnos → commit
Ver respuesta

✅ A) setAutoCommit(false) → INSERT personas → INSERT alumnos → commit → (catch: rollback)

💡 El orden es: 1) iniciar transacción (setAutoCommit(false)), 2) INSERT en tabla padre (personas), 3) INSERT en tabla hija (alumnos), 4) si todo OK: commit(), 5) si hay error: rollback() en el catch.


🏠 Volver al índice


← Volver a Resumen Tema 4 · 🏠 Inicio

Clone this wiki locally