Hoy nuestra tarea es completar el segundo proyecto sobre el tema de Hibernate. Su esencia es comprender la estructura de la base de datos, mapear la entidad a las tablas existentes y agregar la funcionalidad mínima para verificar que el mapeo se realice correctamente.
Ahora con más detalle:
- Descargue el archivo de volcado e impleméntelo en su máquina local. Como base de datos, utilizaremos una base de datos de prueba, que se distribuye como ejemplo junto con el paquete de instalación de MySQL. El volcado es necesario para corregir el estado de la base de datos, ya que no podemos garantizar que no cambie en un día, mes o año.
- No tendremos una plantilla de proyecto, así que cree el proyecto usted mismo. Debe ser un proyecto maven con todas las dependencias requeridas ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- Conecte nuestra base de datos implementada localmente como fuente de datos en Idea. Después de eso, en la pestaña Base de datos, coloque el cursor en el esquema de la película y presione la combinación de teclas
Alt+Ctrl+Shift+U
(solo funciona en la versión Ultimate). Esto mostrará la estructura de todo el esquema de la película (con nombres de columnas, claves, etc.). Se ve como esto:Estoy de acuerdo, no es muy cómodo de ver. Desactive la visualización del título de todas las columnas y comentarios:
Como resultado, obtendrá un esquema de base de datos que ya se puede analizar:
- El circuito se ve complicado, pero no todo es tan malo. Para analizar la estructura de la base de datos, debe encontrar por dónde empezar. No hay una sola respuesta correcta, pero recomendaría comenzar con una tabla
film
. Tomemos algunas relaciones como ejemplo:- La relación entre tablas
film
yfilm_text
es una relación OneToOne explícita , porque la tablafilm_text
tiene un campofilm_id
queNOse refiere a una ID de una tablafilm
(sin clave externa). Pero por nombre y lógica, esta conexión debería ser. Además, en la tabla,film_text
el campofilm_id
actúa como clave principal, lo que garantiza que una "película" corresponde a no más de un "texto de película". - Ahora echemos un vistazo a las tablas
film
ycategory
. Lógicamente, una película puede tener varias categorías. Y una categoría, tal vez diferentes películas. Además, existe una tabla de enlace intermedia entre estas dos tablasfilm_category
. En base a todo lo anterior, se trata de una relación ManyToMany explícita . - Miramos las tablas
film
ylanguage
. Desde el punto de vista de la lógica, la película puede tener una traducción a diferentes idiomas y diferentes películas pueden estar en el mismo idioma. Es decir, se sugiere ManyToMany . Pero si miramos el contenido de la tablafilm
, podemos ver que cada fila de la tabla es una película única. Y solo hay un campo language_id en la línea (también hay original_language_id, pero en todos los registros es nulo, por lo que podemos ignorarlo). Es decir, una película solo puede tener un idioma. Y un idioma, tal vez diferentes películas. La conexión es ManyToOne (la conexión se dirige del cine al lenguaje).
- La relación entre tablas
- Ahora la tarea principal es crear todas las clases de entidad necesarias y asignarlas a las tablas de esquema
movie
. - Agregue un método que pueda crear un nuevo cliente (tabla de clientes) con todos los campos dependientes. No olvide hacer que el método sea transaccional (para no caer en la situación de que la dirección del comprador esté registrada en la base de datos, pero el comprador mismo no).
- Agregue un método transaccional que describa el evento "el cliente fue y devolvió una película alquilada previamente". Elija cualquier comprador y evento de alquiler de su elección. No es necesario volver a calcular la calificación de la película.
- Agregue un método transaccional que describa el evento “el comprador fue a la tienda (tienda) y alquiló (alquiler) inventario (inventario) allí. Al mismo tiempo, realizó un pago (pago) al vendedor (personal). Película (a través de inventario) elija a su discreción. La única restricción es que la película debe estar disponible para alquiler. Es decir, no debe haber ningún registro de inventario en alquiler o debe completarse la columna return_date de la tabla para el último alquiler de este inventario.
rental
- Agregue un método transaccional que describa el evento "se filmó una nueva película y estuvo disponible para alquilar". Película, idioma, actores, categorías, etc., elige a tu criterio.
- La estructura de la tabla no se puede cambiar. Pero necesita hacer sugerencias para mejorar. Identificamos un lugar problemático en el párrafo 4 (ausencia de clave externa en la tabla
film_text
en el campofilm_id
de la tablafilm
). Vea si todavía hay tales "errores" en la estructura de la base de datos. Si es así, agregue un archivo Léame a la raíz del proyecto y describa estos errores.
Análisis del proyecto: