Saltar navegación

20260127 JPA_10 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 27 de enero de 2026 por Raquel G.

1 visualizaciones

Descargar la transcripción

Vale, vamos. Vale, pues implement serializable no es obligatorio. Es decir, ¿de dónde viene la herencia de poner implement serializable? Pues cuando se usaba el Java Enterprise Beans, o sea, la persistencia de Java original, el Java EE, Enterprise Edition, todo esto, ahí sí que todas las entidades que iban a ser gestionadas por Enterprise Edition tenían que implementar serializable. 00:00:00
Para JPA y el hibernate moderno 00:00:27
No hace falta, ¿vale? 00:00:29
Entonces, todo lo que no nos haga falta 00:00:30
Y vamos a quitarlo, pero lo podéis ver por ahí 00:00:33
Vale, propiedades 00:00:35
Están claras, ID, nombre 00:00:37
Y región 00:00:39
Hay una relación de uno a muchos 00:00:41
Con el conjugador 00:00:43
Que tendremos que hacer, está claro 00:00:45
El constructor vacío, constructor con parámetros 00:00:47
El bigint 00:00:50
Lo ha resuelto con log 00:00:52
Envolvente además, venga, nos gusta, nos lo quedamos 00:00:53
los get, los set 00:00:56
y ya está, y no ha hecho nada más 00:00:58
nos ha ahorrado trabajo, vale, ahora ya sí 00:01:00
que tenemos que anotar, esto es una entidad 00:01:02
pues entonces 00:01:04
entity, vale 00:01:05
y lo 00:01:07
importamos de ya carta 00:01:10
la clave primaria, ¿dónde está? 00:01:11
hay una clave primaria que es id 00:01:14
pues la anotamos 00:01:16
vale 00:01:18
y aquí hay 00:01:20
una relación de 00:01:22
un equipo, muchos jugadores 00:01:23
luego esto es una relación 00:01:27
one 00:01:29
two 00:01:31
many, vale, one two many 00:01:31
donde se mapea y donde 00:01:35
se dice 00:01:37
cuál es el campo 00:01:37
que me lleva 00:01:41
de una tabla a otra 00:01:43
en la propietaria, que la propietaria 00:01:44
será el jugador, aquí no 00:01:47
pues entonces aquí pondremos un 00:01:48
maped by 00:01:51
Y aquí era el nombre del campo 00:01:51
Como lo estoy haciendo de memoria 00:01:55
En algunas cosas me equivocaré 00:01:57
Si lo detectáis me lo decís 00:02:00
Mapped by yo creo que se escribía así 00:02:01
Y como vamos a llamar al campo 00:02:04
Equipo de jugador seguramente 00:02:06
Lo querramos llamar equipo 00:02:08
Pues entonces 00:02:09
Lo llamo así 00:02:12
En principio 00:02:13
Esta yo creo que tendría todas las 00:02:16
Anotaciones necesarias 00:02:18
En principio 00:02:20
Si luego nos falta alguna, pues ya vemos 00:02:22
Ahora lo que tenemos es que crear la clase 00:02:24
Jugador 00:02:27
Sí, a ver, nos falta 00:02:27
Si queremos 00:02:32
Darle valores 00:02:33
A las cosas 00:02:36
Bueno, lo sé 00:02:37
Es que no sé si vamos a querer que haga cascada 00:02:40
O no, vamos a dejarlo así por ahora 00:02:42
¿Vale? 00:02:44
El fetch, este por 00:02:47
Defecto, en el one too many 00:02:50
este era lazy, entonces vamos a dejarlo así 00:02:52
en el valor por defecto 00:02:54
y ya está, entonces vamos a hacer jugador 00:02:56
entonces 00:02:58
jugador 00:02:59
es por si se llama distinto a 00:03:01
claro, claro, entonces 00:03:06
en este caso 00:03:08
id nombre y región es el nombre de la 00:03:09
tabla, vamos a ver, id nombre y 00:03:12
región es el nombre de la tabla 00:03:14
¿verdad? pues entonces no hay ni arroba column 00:03:16
ni nada, y la tabla se llama 00:03:18
Equipo, sí, luego tampoco 00:03:20
Hay aquí un 00:03:22
Campo name 00:03:23
Porque no 00:03:25
Se llama igual, si no, podríamos anotarlo 00:03:27
Con el column name, etcétera 00:03:30
Vale, jugador 00:03:32
Pues vamos a crear la clase 00:03:33
Jugador 00:03:36
Y ahora se la vamos a pedir a este 00:03:37
Venga 00:03:40
Dame 00:03:42
Clase 00:03:45
Jugador 00:03:48
Sin anotaciones 00:03:50
Vale 00:03:52
Te dejo la clase jugador 00:04:00
Venga, ya está 00:04:03
Clase jugador 00:04:05
Ahí está 00:04:06
Ala, clase jugador 00:04:08
ID, nick, email, fecha de alta 00:04:19
Entonces 00:04:21
La clase jugador es una entidad 00:04:22
Que no se nos olvide poner 00:04:25
Entity 00:04:27
Y la tabla se llama jugador 00:04:28
Así que no lo cambiamos 00:04:32
Aquí hay una relación de muchos a uno 00:04:33
Que era la que ya teníamos el otro extremo 00:04:36
Hecho 00:04:39
Many to one 00:04:39
Entonces aquí 00:04:43
Si que es donde hay que poner el join column 00:04:44
Y todo el rollo ese 00:04:46
¿Vale? Entonces 00:04:48
Esto yo lo voy a 00:04:50
Copiar del otro 00:04:53
Del de 00:04:55
Empleados departamentos 00:04:57
Pues lo copio aquí de 00:04:58
Empleado 00:05:02
Era el many to one 00:05:03
Join column 00:05:06
Vale, aquí 00:05:08
Hemos visto antes, cuando se lo hemos preguntado 00:05:18
Que el por defecto era eager 00:05:21
Entonces 00:05:22
Aquí lo forzamos a que sea lazy 00:05:24
También, si no lo hubiéramos forzado 00:05:27
Sería eager, que tampoco es tan grave 00:05:29
Porque es un departamento 00:05:30
Y la join column no es id de departamento 00:05:31
Lógicamente, sino la join column 00:05:34
Equipo id 00:05:38
Join column es 00:05:40
Equipo 00:05:44
Barra baja id 00:05:46
Voy a poder actualizar el equipo del jugador 00:05:48
Una vez el jugador 00:05:51
Este creado y sea persistente 00:05:52
Hombre pues si no le voy a obligar el resto de su vida 00:05:54
A jugar el mismo equipo siempre 00:05:56
Pues entonces true 00:05:58
Ala lo dejamos así a falta de 00:05:59
Que luego veamos que queremos hacer un cascade 00:06:02
Un orphan removal 00:06:05
De otras cosas raras 00:06:06
Vale 00:06:08
La clave uy perdona 00:06:10
Que se nos ha olvidado también la clave primaria 00:06:12
Y de 00:06:14
Di, dime 00:06:15
Si hay una mayúscula 00:06:18
Entiende que es una barra baja 00:06:21
Aquí en fecha 00:06:27
No, no lo entiende, aquí hay que cambiárselo 00:06:29
Entonces hay que repasar los campos 00:06:31
Porque claro, las barras bajas son 00:06:33
Muy típicas de 00:06:35
De base de datos 00:06:36
Pero en Java no 00:06:40
Entonces aquí sí que tendríamos que ponerle 00:06:40
El column 00:06:43
El column 00:06:44
Lo pongo todo aquí arriba en las propiedades 00:06:46
Aunque se podría poner en los getter 00:06:49
Column 00:06:51
Y esto era name 00:06:53
Fecha alta 00:06:55
Vale 00:06:59
Tenemos la relación 00:07:04
Las propiedades 00:07:08
Nick y mail 00:07:10
No cambian de nombre 00:07:11
Anotada la clave primaria 00:07:13
La relación 00:07:16
Y tenemos más relaciones 00:07:16
Este, el jugador 00:07:21
Está muy bien relacionado 00:07:23
Con equipo está claro 00:07:24
Que es un jugador 00:07:26
Que tiene muchas relaciones 00:07:32
Y muy bien situadas 00:07:33
Vale, esta ya está 00:07:35
Anotada, pero tiene una relación 00:07:37
De uno a uno 00:07:40
Con perfil gamer 00:07:41
A ver, esto 00:07:44
Que curioso 00:07:47
Si que de alguna manera en SQL 00:07:49
Queda registrado si es de uno a uno 00:07:52
Porque el chat cpt 00:07:54
Si no, ¿cómo ha deducido? 00:07:56
Yo le he pasado el script sin más 00:07:57
¿Cómo ha deducido que es uno a uno? 00:07:58
De alguna manera tiene que estar 00:08:01
A ver, voy a echar un vistazo rápido al script 00:08:02
A ver en el script de qué manera queda reflejado 00:08:04
Que es uno a uno 00:08:08
Jugador 00:08:08
Perfil gamer 00:08:11
Ah bueno, como no sé en el comentario 00:08:13
Claro, porque tiene un comentario que listo 00:08:16
Pero si yo lo hubiera hecho sin el comentario 00:08:17
Lo hubiera hecho mucho 00:08:19
Claro 00:08:20
Porque por lo demás 00:08:21
Yo creo que 00:08:25
No lo sé porque yo de secueles 00:08:32
Sé muy poco 00:08:35
Pero creo que no hay forma de registrar 00:08:36
Que la relación sea de uno a uno 00:08:39
Pura 00:08:41
Pero no lo sé 00:08:42
Bueno, a ver 00:08:45
Relación de uno a uno 00:08:47
Vale, pues esta 00:08:51
La tenemos que anotar así 00:08:53
Vale 00:08:59
Entonces de one to 00:09:01
La anotamos de uno a uno 00:09:02
Y esta también tiene una 00:09:05
Join column 00:09:07
Esta tiene una join column 00:09:08
Cuyo nombre es 00:09:14
Jugador id 00:09:16
Jugador barra baja 00:09:21
Y aquí también 00:09:29
podríamos hacer el 00:09:32
cascade, no tiene sentido porque a través del 00:09:34
perfil gamer, a través de perfil 00:09:36
no vamos a querer 00:09:38
insertar 00:09:39
jugadores 00:09:42
o sea, a través de jugador 00:09:44
cuando insertamos jugador, si puede 00:09:46
ser que queramos insertar su perfil también 00:09:48
junto, pero al revés no, entonces aquí poner 00:09:50
un cascade es un poco 00:09:52
ah no, perdón, sí, sí, sí, aquí 00:09:55
es donde tendría sentido poner el cascade 00:10:00
Porque estoy en jugador, lo estoy haciendo en jugador 00:10:02
Entonces 00:10:05
Vale, vale, vale 00:10:06
Estoy en jugador, es que estoy en jugador 00:10:09
No estoy en perfil, entonces aquí sería un mape 00:10:11
El join column estaría en el otro lado 00:10:13
Era lo que te ibas a decir, ¿verdad? 00:10:14
Claro, es que estaba en el chip de que estoy en el otro lado todo el rato 00:10:16
Vale, no, aquí, perdón 00:10:19
Aquí sería un 00:10:21
Esta la vamos a mapear 00:10:22
En el perfil gamer 00:10:28
Y en el perfil gamer pues tendrá un objeto 00:10:32
Jugador 00:10:34
Vale, ya la mapearemos 00:10:35
En perfil gamer 00:10:38
Aquí se podría hacer un cascade 00:10:39
Porque 00:10:44
Yo puedo 00:10:45
Tiene interés 00:10:47
Insertar el perfil 00:10:49
A la vez que inserto el jugador 00:10:52
Insertar su perfil, podría tener sentido 00:10:54
Por ejemplo 00:10:56
Yo que sé, por probar cosas 00:11:00
Vale 00:11:02
Esta relación en principio ya estaría 00:11:04
Y ahora nos queda esta 00:11:06
Que es la más raruna 00:11:10
¿Vale? 00:11:11
Esta de muchos a muchos 00:11:14
A ver 00:11:15
Aquí hay un montón de posibilidades 00:11:16
Bueno, un montón no 00:11:19
Dejémoslo en tres o cuatro 00:11:20
Que en este caso en particular 00:11:22
Se quedan en dos o tres 00:11:26
Aquí 00:11:28
¿Veis? 00:11:35
es que él ya nos está dando la pista 00:11:37
vamos a ver 00:11:39
imaginaos que 00:11:42
estuviéramos en la situación 00:11:43
de que la relación 00:11:45
no tuviera un estado propio 00:11:47
que fuera esto, podría serlo 00:11:49
perfectamente, no tiene un estado propio 00:11:51
entonces 00:11:53
esa relación se podría 00:11:55
mapear así 00:11:57
sin más 00:11:59
perdón, videojuego 00:12:00
he borrado la parte que no era 00:12:05
videojuego 00:12:07
que es 00:12:09
un jugador puede jugar 00:12:10
a muchos videojuegos 00:12:13
y luego en la tabla videojuegos 00:12:14
yo pondría 00:12:17
una lista de jugadores 00:12:19
y aquí lo anotaría con many 00:12:21
to many 00:12:23
y tendría que poner los dos 00:12:24
campos de los join column 00:12:27
y el inverse join column, etc. 00:12:29
y es una solución natural 00:12:30
normalmente no se 00:12:33
hace así, normalmente se hace una 00:12:35
tabla intermedia y además 00:12:37
al hacer una tabla intermedia 00:12:39
yo puedo poner 00:12:41
un estado propio 00:12:42
a cada relación 00:12:44
porque aquí 00:12:46
si yo quiero además caracterizar 00:12:48
la relación entre un jugador y un videojuego, no puedo 00:12:51
es imposible, no puedo caracterizarla 00:12:53
entonces si la quiero caracterizar con propiedades 00:12:55
como es aquí el caso 00:12:57
que quiero caracterizar cada relación 00:12:58
establecida con propiedades 00:13:01
no me queda más remedio que hacer una tabla 00:13:03
intermedia 00:13:05
entonces 00:13:06
esa tabla intermedia 00:13:07
es la que 00:13:13
GPT nos ha ofrecido cuando nos ha 00:13:16
dicho que 00:13:19
el jugador tiene 00:13:21
una lista de jugador 00:13:23
videojuego, esta es la tabla 00:13:25
intermedia, entonces ahora 00:13:27
esto se convierte 00:13:29
en una relación de uno 00:13:31
a muchos, de one to nine 00:13:33
y luego de aquí va de many to one 00:13:34
al otro lado, entonces 00:13:37
claro, o sea un jugador 00:13:39
va a tener muchos 00:13:43
objetos de estos 00:13:45
un jugador va a tener muchos objetos de estos 00:13:46
y luego un videojuego también va a tener 00:13:49
muchos objetos de estos 00:13:51
jugador videojuego 00:13:53
claro, one to many 00:13:55
hacia jugador videojuego 00:13:57
y el efecto final es 00:13:59
many to many entre ellas 00:14:01
Entre los extremos, es el efecto final 00:14:03
Entonces 00:14:05
Esta sería 00:14:08
Un one too many 00:14:10
Y de nuevo 00:14:15
Estaría mapeada en el otro lado 00:14:17
Entonces, en jugador videojuego 00:14:18
¿Cómo vamos a llamar 00:14:26
A este campo? Pues jugador 00:14:28
Lo vamos a llamar, supongo 00:14:30
¿Vale? 00:14:31
Bueno, jugador ID será el campo 00:14:36
Pero el objeto será jugador 00:14:37
En la tabla intermedia 00:14:39
En la entidad intermedia 00:14:40
El objeto será jugador 00:14:42
Vale 00:14:43
Entonces 00:14:45
Cuando 00:14:47
Muppet va y esto 00:14:47
Y lo mismo aquí 00:14:49
Bueno, podríamos fijar 00:14:50
El cascade, el fetch 00:14:52
Bueno, eso ya 00:14:53
En función de 00:14:53
Si luego 00:14:54
Un objeto interesante 00:14:55
Lo fijamos 00:14:57
Lo dejamos por defecto 00:14:57
Lo que sea 00:14:58
Y en principio 00:14:59
Aquí no se nos escapa 00:15:01
Ninguna anotación más 00:15:04
Vamos a decirle 00:15:05
Para verificar 00:15:09
Dame esta que siempre nos 00:15:12
Enseña cosas 00:15:15
Con las 00:15:16
Anotaciones 00:15:19
Vale 00:15:20
Bueno, ah 00:15:25
Se nos olvida 00:15:30
Si es autoincrement 00:15:32
Vale, vale, eso se nos ha olvidado 00:15:34
Vale, entonces bueno, los columns 00:15:36
Entonces hemos pasado de los columns 00:15:38
Para fijar lo que pueda ser null 00:15:40
Lo hemos pasado de los columns 00:15:42
Lo que nos interesa, esta que es 00:15:44
many to one con join column, vale 00:15:46
one to one 00:15:49
el mapped by 00:15:51
y one to many, mapped by 00:15:53
jugador, y luego los valores 00:15:55
vale, pues sí 00:15:56
entonces, ¿qué nos ha faltado aquí? 00:15:58
el que sea autoincrement 00:16:00
el jugador tiene una clave primaria 00:16:02
autoincrement 00:16:04
que la especificamos 00:16:05
con esto, vale 00:16:09
y equipo también el autoincrement, supongo 00:16:13
seguramente fue autoincrement 00:16:15
Y jugador también 00:16:20
Auto increment 00:16:21
Vale 00:16:24
Que que está haciendo en los setter 00:16:26
No lo sé, vamos a 00:16:30
Está haciendo 00:16:31
Lo de la clave ajena 00:16:44
Que hemos dicho antes 00:16:47
Yo creo 00:16:48
Lo que hemos identificado antes 00:16:49
que hemos dicho 00:16:53
se suele añadir un método 00:16:56
para asegurarnos de que no vamos a tener 00:16:58
claro, el problema es que si tú 00:17:00
en este caso, el propietario 00:17:06
de la relación entre el jugador 00:17:08
y el perfil gamer, es el lado 00:17:10
del mucho siempre, el perfil gamer, pero es el que tiene 00:17:12
el campo clave ajena 00:17:14
entonces, tú puedes 00:17:16
si tienes el cascá de persis, puedes a través 00:17:18
del jugador, persistir también 00:17:20
su perfil, pero ¿cuál es el problema? 00:17:22
que al ser el perfil el propietario 00:17:25
y por tanto tener un campo adicional 00:17:26
ese campo adicional no se va a fijar 00:17:28
desde el persis del jugador 00:17:30
entonces tienes que ser cuidadoso y fijarlo tú 00:17:32
¿cómo se fija? con nuestra 00:17:34
sentencia, entonces la he 00:17:36
incluido en el set 00:17:38
por si se nos olvidaba, que nosotros 00:17:39
antes lo hemos hecho poniendo el otro método 00:17:42
lo que sea, a eso se 00:17:44
refiere 00:17:46
no, no tenemos 00:17:47
por qué ponerlo, nosotros ya son 00:17:52
Porque a nosotros a lo mejor nos interesa ponerlo en otra arquitectura, ¿vale? 00:17:53
Cuando nosotros hagamos los casos de uso, lo que sea, 00:17:58
o podemos añadir el método específico que lo hace, ¿vale? 00:18:02
No tenemos por qué seguirle a pie juntillas, si tampoco es Dios. 00:18:07
O sea, nos es muy de muchísima ayuda, pero bueno, 00:18:11
que no nos tiene que ordenarnoslo todo, tampoco. 00:18:15
Tenemos nuestra propia personalidad. 00:18:18
Y ya está 00:18:20
No, no, te refería solo a eso 00:18:22
O has visto alguna otra cosa rara 00:18:23
Vale, pues entonces 00:18:25
Ahora ya nos falta, siguiente clase 00:18:29
Vamos con el perfil gamer 00:18:31
Este 00:18:33
Pues ahora le vamos a pedir 00:18:34
Dame perfil 00:18:37
Gamer 00:18:42
Sin anotaciones 00:18:43
Ay, en equipo 00:18:45
No le he quitado el serializable 00:19:12
Este 00:19:15
Se lo voy a quitar 00:19:15
Vale 00:19:19
Vale, perfil gamer 00:19:20
Bueno, pues tiene 00:19:27
Su ID, su entity 00:19:32
Por supuesto 00:19:35
Entity 00:19:36
Aquí el nombre de la tabla, me cabe la duda 00:19:38
De cómo se llama aquí 00:19:41
Con barra baja, entonces aquí sí que no nos queda más remedio 00:19:42
Que cambiársela 00:19:45
Vale 00:19:59
Estables de persistence 00:20:01
Vale 00:20:03
Y ahora esto lo mismo, este es un id autoincrement, suponemos, id y rango y horas totales no sabemos si se llaman igual, id y rango y horas totales no se llaman igual y el url tweets ese tampoco, seguro. 00:20:04
Luego aquí tenemos un column 00:20:26
Total es 00:20:29
Y aquí tenemos otro column 00:20:41
Name 00:20:44
Igual a url 00:20:46
¿Qué es el url Twitch? 00:20:49
¿Qué es eso? 00:20:51
Es la 00:20:53
¿La qué? 00:20:54
La plataforma de streaming 00:20:57
La plataforma de streaming que estás usando para jugar 00:20:58
Para transmitir 00:21:02
¿Y qué es hacer un directo? 00:21:04
Jugar en directo 00:21:07
O sea, tú juegas y tu juego lo transmites 00:21:10
Y yo juego mi videojuego, lo transmito 00:21:12
Y la gente dice, hostia que bien juegas 00:21:24
Bueno, habrá gente que lo haga 00:21:26
Que habrá gente que gane mucha pasta 00:21:30
Por eso 00:21:33
Para no dejarlas a medias 00:21:33
Para no dejar a medias el modelo 00:21:50
Y ya el próximo día poder completar 00:21:53
Incluso traerlo hecho 00:21:55
Para verlo y ya está 00:21:57
Vale, pues entonces 00:21:59
el perfil gamer, estábamos terminando 00:22:00
lo de anotar, la clave primaria 00:22:05
las columnas que habían cambiado de nombre 00:22:06
y la relación uno a uno 00:22:08
esta hay que anotarla 00:22:12
es el otro extremo 00:22:15
y esta ya sí que sí, aquí ahora 00:22:18
ya sí que hay que ponerle el join column 00:22:21
el join column te dice de la tabla perfil gamer 00:22:23
cuál es el campo que te lleva jugador 00:22:31
y el join column 00:22:33
nos lleva 00:22:35
a través de jugador 00:22:36
barra baja id 00:22:39
y me falta 00:22:41
el name 00:22:45
sí, pero lo hemos puesto ya 00:22:45
aquí, ¿no? 00:22:51
¿no? 00:22:51
¿cómo? 00:22:51
o sea, aquí he puesto mapez by jugador 00:22:59
A ver, perfil lleva a jugador 00:23:01
A través de esta columna 00:23:14
Y luego, jugador te lleva a perfil 00:23:16
O sea, de cual te lleva a cual 00:23:19
Es por la clase que aparece aquí 00:23:21
Jugador te lleva a perfil 00:23:22
Y perfil te lleva a jugador 00:23:24
Y luego la información necesaria es 00:23:26
Cual es la columna 00:23:28
La columna figura solamente uno de los dos extremos 00:23:30
Y en el otro extremo avisas de que esa columna figura ahí, ¿vale? 00:23:32
¿Es Alejandra la que se ha asomado? 00:23:37
Pues que entre. 00:23:40
¿Vale? 00:23:40
Vale, entonces 00:23:40
El perfil gamer ya estaba 00:24:01
Y en principio 00:24:03
Todo lo demás está 00:24:07
A falta de que cuando luego probemos cosas 00:24:08
Nos den errores, que ojalá nos den 00:24:11
Y así pues vemos que cosas raras 00:24:12
Pueden pasar por aquí 00:24:15
Dime 00:24:16
¿Cómo? ¿Cómo? 00:24:16
Lo mismo te he preguntado 00:24:29
Sí, lo mismo te he preguntado 00:24:30
Lo que pasa es que no lo comentaré 00:24:32
A ver, bueno lo que pasa es que esto 00:24:33
Es igual que una de muchos a uno 00:24:37
Eso no ha aportado nada nuevo 00:24:38
Es decir 00:24:41
A ver, perfil de... 00:24:42
Bueno, explícaselo tú 00:24:46
El diagrama, sí 00:24:47
Aquí 00:24:50
Espera, perdón 00:24:50
Con el matiz de que además 00:24:55
El que tenga el join column 00:24:58
Bien sea en el one to one 00:25:00
En el many to many 00:25:02
Aunque many to many 00:25:05
En esta variante no la vamos a hacer 00:25:06
Porque hay tabla intermedia 00:25:08
Pero luego haremos rápidamente la variante many to many 00:25:09
el que tenga el extremo 00:25:12
con el matiz de que es el 00:25:16
propietario, en este caso 00:25:18
ninguno tiene el extremo 00:25:20
pero se puede extender al que tenga la clave 00:25:21
el que tenga la clave 00:25:24
es el que manda en esa relación 00:25:26
el que manda 00:25:28
a la hora de hacer 00:25:30
los 00:25:31
las 00:25:34
modificaciones 00:25:36
o sea los inserts, las actualizaciones 00:25:37
Ligadas de unos a otros 00:25:40
Bueno, esto es mejor un ejemplo 00:25:43
No está muy bien explicado 00:25:44
Vale, pues 00:25:46
Perfil gamer en principio estaría 00:25:47
Ahora 00:25:51
¿Qué más nos faltaba? 00:25:52
Pues jugador videojuego, es esta tabla intermedia 00:25:54
Y luego aparte de jugador videojuego 00:25:57
Que es la tabla intermedia 00:26:01
Vamos a hacer primero videojuego 00:26:02
Antes de la que nos liga a los dos 00:26:04
Le vamos a pedir videojuego primero 00:26:06
Entonces 00:26:08
Donde le tenemos 00:26:10
Videojuego 00:26:11
Sin anotaciones 00:26:20
Videojuego 00:26:23
Y ya casi 00:26:36
Hemos acabado 00:26:38
Videojuego, ala 00:26:39
Yo le quito esto 00:26:51
Y ya está 00:26:52
Entidad 00:26:56
Dime 00:26:57
Vale, clave primaria 00:27:06
Clave primaria 00:27:15
Autoincrement 00:27:18
No estoy mirando en la tabla 00:27:21
Estoy asumiendo que lo son todas 00:27:23
Vale 00:27:24
Y título género competitivo 00:27:26
Eso es 00:27:29
Título, género competitivo, sí 00:27:30
Eso está bien 00:27:32
Género competitivo 00:27:34
Vale, y ahora 00:27:37
Esto es lo mismo 00:27:38
Esta es la relación de muchos a muchos 00:27:39
Con jugador, pero que en realidad 00:27:42
Es una relación de uno 00:27:44
A muchos con la intermedia 00:27:46
Y ahora 00:27:49
Esta 00:27:54
Estará mapeada 00:27:55
En la intermedia por un campo 00:27:57
Que seguramente vamos a llamar videojuego 00:28:00
Videojuego 00:28:02
Muppet by 00:28:05
Muppet by 00:28:06
Seguramente lo vamos a llamar videojuego 00:28:09
Y ya está 00:28:11
Videojuego no se relaciona con nadie más 00:28:16
Nada más que con los jugadores 00:28:18
A través de la tabla 00:28:19
Intermedia 00:28:22
Jugador videojuego 00:28:23
Entonces solo nos queda la entidad 00:28:25
Jugador videojuego 00:28:31
Que se corresponde a la tabla 00:28:33
Jugador videojuego 00:28:35
Que hace la relación de muchos a muchos 00:28:36
Y esta es la que tiene más 00:28:38
Un par de variantes o tres 00:28:40
Entonces 00:28:43
Vamos a pedírsela 00:28:44
Videojuego 00:28:55
Sin anotaciones 00:28:57
Vale, a ver que hace 00:29:06
Vale, pues ha hecho 00:29:16
La variante 00:29:39
Fea pero cúmula 00:29:41
FK es 00:29:46
Clave ajena 00:29:49
Vale, ha hecho la variante 00:29:50
Fea, pero cómoda 00:29:53
Ahora, vale 00:29:54
Entonces, pero es la más cómoda 00:29:57
Y la más fácil de anotar, nos ha hecho el trabajo 00:29:58
Fácil 00:30:01
Esta es una 00:30:01
Entidad, jugador videojuego 00:30:04
Se llama así, jugador 00:30:07
Barra baja videojuego 00:30:08
Vamos a ponerle entonces 00:30:10
Su nombre 00:30:13
Igual a 00:30:13
Jugador 00:30:19
Video 00:30:20
juego. Vale, la verdad es que 00:30:23
con el control shift o este 00:30:30
que me resistía al principio me has 00:30:32
solucionado la vida. 00:30:34
Es que 00:30:37
lo que pasa es que estas cosas te resistes 00:30:38
luego cuando entras ya no puedes parar. 00:30:40
Entonces, aquí 00:30:43
esta tabla tiene 00:30:44
dos claves 00:30:46
y la combinación de ambas 00:30:47
es la que hace único a cada 00:30:50
registro, la combinación de ambas. 00:30:52
Entonces, ambas son 00:30:55
clave primaria. 00:30:56
Pues en ambas hay que hacer esto, id e id, porque las dos son clave primaria, es una clave primaria compuesta. 00:30:57
Y la combinación de ambas es la que es única, la combinación. 00:31:08
Y luego además cada relación, entonces el nombre lo hemos elegido bien, porque esto además de ser clave primaria, 00:31:13
aquí no solo es clave primaria, sino que es el otro extremo del one to many del otro lado. 00:31:22
Es decir, esta es many to one 00:31:30
Esta además de ser clave primaria 00:31:32
Es esto 00:31:34
Many to one, esta en particular 00:31:35
A jugador 00:31:38
Teníamos aquí jugador, one to many 00:31:39
Esta de aquí, a jugador videojuego 00:31:44
Que decíamos que estaba mapeada por jugador 00:31:46
Pues bien, el nombre está bien elegido 00:31:48
Entonces 00:31:50
Esta de aquí es el otro extremo 00:31:51
De esta 00:31:54
El otro extremo de esta 00:31:56
Y aquí hay sí que poner 00:31:58
Aquí ya si el join column 00:32:02
Y el campo 00:32:04
Jugador barra baja 00:32:14
Jugador 00:32:17
Barra baja id 00:32:20
Y esta de aquí lo mismo 00:32:22
Esta es el extremo 00:32:28
De aquí 00:32:34
De esta de aquí 00:32:36
Claro 00:32:38
Ambas además son claves primarias 00:32:41
Y además es el extremo de esta de aquí 00:32:43
Entonces, que efectivamente habíamos dicho que se mapeaba con videojuego 00:32:45
Pues bien, hemos acertado porque se llama aquí videojuego 00:32:48
Y aquí la clave será videojuego ID, supongo 00:32:52
Videojuego ID 00:32:55
Videojuego ID, vamos a verificarlo 00:33:01
Videojuego ID 00:33:04
¿Dónde está? 00:33:08
Videojuego ID, sí, está bien 00:33:10
Vale 00:33:11
Y atributos extra, posición principal 00:33:12
Seguramente ya ha cambiado de nombre 00:33:15
Sí, posición principal ha cambiado de nombre 00:33:17
Luego habrá que ponerle 00:33:19
Un... 00:33:21
Dime 00:33:22
¿Puedo utilizar el video? 00:33:23
00:33:26
No es necesario 00:33:27
Por eso he dicho 00:33:32
Te da la opción fea 00:33:33
Porque es fea 00:33:34
Normalmente tú deberías hacer 00:33:35
Ahora no 00:33:37
Porque nos vamos a ir 00:33:40
Lo normal es hacer una clase aparte 00:33:42
Con la clave 00:33:44
y que esté aquí ese objeto 00:33:45
pero esto también lo puedes hacer 00:33:47
y te lo traga 00:33:49
y en práctica 00:33:51
de todas las funcionalidades que hagas te van a funcionar 00:33:54
todas iguales 00:33:56
salvo si 00:33:57
en situaciones en las cuales 00:33:59
trabajas con 00:34:01
diferentes contextos de persistencia 00:34:04
ahí puedes notar que la aplicación no funciona 00:34:06
bien 00:34:08
o sea, todo te lo va a tragar 00:34:08
no vas a tener errores de ejecución ni de nada 00:34:12
pero a la hora 00:34:13
de actualizar, al no poder recuperar 00:34:15
al no poder hacerte un find de la clave 00:34:17
ese es el problema 00:34:19
que te quedas sin la posibilidad de hacer un find 00:34:21
por clave de aquí, entonces 00:34:23
¿afecta tu aplicación? no afecta, depende 00:34:25
tienes que picar todo a mano 00:34:27
claro, pero que esto te funciona y no solo 00:34:28
picar todo a mano 00:34:31
o sea que no solo que tengas que picar más a mano 00:34:32
que incluso a veces ni siquiera, incluso puede ser 00:34:35
más cómodo aquí, sino que hay 00:34:37
situaciones muy específicas 00:34:39
En las cuales esto no te puede funcionar bien 00:34:41
Puede perder alguna referencia 00:34:45
Puede perder, entonces no es muy recomendado 00:34:46
Por eso 00:34:48
Column 00:34:49
Y aquí era name 00:34:52
Le voy a preguntar ahora por qué no se ha dado esta solución 00:34:53
En vez de la otra 00:34:57
Posición 00:34:57
Barra baja 00:35:00
Principal 00:35:01
Vale, entonces 00:35:04
Y ya está, ya estaría 00:35:10
Las relaciones son 00:35:11
estas 00:35:14
esta que ha cambiado del nombre 00:35:14
constructor 00:35:17
y ya está 00:35:18
¿vale? entonces 00:35:21
el modelo estaría todo 00:35:25
ahora ya 00:35:27
¿eh? 00:35:30
ah, sí, claro 00:35:34
aquí habría que meter las clases, pero bueno 00:35:35
esto ya lo vamos a parar nosotros aquí ya 00:35:37
aquí habrá que meter todas ellas 00:35:39
las que hemos hecho todas ellas 00:35:41
y ahora ya, pues podríamos plantear 00:35:42
una aplicación con diferentes 00:35:45
Funcionalidades 00:35:47
Vamos a dejarlo planteado 00:35:48
Y ya está 00:35:51
Entonces, le voy a preguntar 00:35:52
Aquí 00:35:55
Me has dado 00:36:02
Jugador videojuego 00:36:16
Sin clave 00:36:22
De vida 00:36:26
No es más feo 00:36:30
O igual es que no has intencionado hacerlo 00:36:33
Bueno, va 00:36:36
Como no nos da tiempo 00:37:02
Hoy todavía hacerlo de la otra manera 00:37:05
ni lo comentamos 00:37:07
solo quería saber por qué lo había hecho 00:37:08
vale, pues entonces lo que sí le vamos 00:37:11
a sugerir es, para que no irnos 00:37:15
sugiéreme 00:37:17
unos servicios 00:37:21
para hacer 00:37:25
con este 00:37:27
modelo 00:37:28
que sean didácticos 00:37:29
vamos a usar 00:37:33
jpa 00:37:37
put sin spring 00:37:38
Vale, voy a decir que me los meta en un word 00:37:42
Seleccionamos 00:38:00
Algunos 00:38:02
Y ya está 00:38:04
Y el próximo día completamos esta aplicación 00:38:06
Con algunos de ellos, pues es que son un montón 00:38:08
Se ha venido arriba 00:38:10
Escúchame, polivalente 00:38:13
Subir nivel masivo 00:38:15
Madre mía 00:38:18
Jugadores polivalentes 00:38:20
Qué barbaridad 00:38:25
00:38:26
Vale, vale, ya está 00:38:28
Una plantilla base de servicio 00:38:30
Esta es para aprender lo que duele 00:38:32
Métodos que comparen 00:38:37
Fetch versus Lazy 00:38:40
Uh, paginación 00:38:42
Quita, quita 00:38:44
Lo que duele no queremos lo que duele 00:38:45
Para lo que duele ya 00:38:48
Ala 00:38:49
Yo que sé, no sé 00:38:51
Prefiero saberlo 00:38:54
Service de paginación enlistado 00:38:56
Set first result, set max result 00:39:04
Para las queries 00:39:06
Esto es para ponérselo a las queries 00:39:09
Pero no nos interesa, ¿no? 00:39:12
Al que le interese que lo busque 00:39:15
Que sí, hombre, es interesante 00:39:16
Pero no vamos a poner nosotros aquí 00:39:21
Vosotros tenéis todo vuestro tiempo, ganas 00:39:23
Y potencial del mundo para investigar todo esto 00:39:27
Venga, pues lo vamos a dejar subido aquí 00:39:29
Al aula virtual 00:39:35
Vale, pues venga 00:39:39
Listado con servicios para la aplicación anterior 00:39:59
Modelo de videojuegos 00:40:03
Descargamos, servicios 00:40:17
Vale, listado con servicios para el modelo de videojuegos 00:40:25
Vamos a consensuar 00:40:46
Algunos 00:40:48
Por si de aquí al jueves os aburrís mucho 00:40:49
Y necesitáis 00:40:54
Reforzar esto un poquito 00:40:55
A ver, de equipo service 00:41:02
La verdad es que 00:41:09
Los deberíamos hacer todos 00:41:11
Porque son muy sencillitos 00:41:13
Bueno, yo voy a intentar 00:41:15
Traer hechos, todos los que pueda 00:41:18
Para 00:41:20
no estar aquí tecleando el próximo día 00:41:21
sino echar un vistazo y esas cosas 00:41:24
a ver 00:41:26
yo voy a marcar 00:41:28
en negrita lo que 00:41:32
deberíamos poder hacer 00:41:33
de cara a autoevaluarnos 00:41:35
que tenemos más o menos el nivel del examen 00:41:37
más o menos, ¿vale? 00:41:39
hombre, no 00:41:48
no, hombre, no 00:41:49
claro 00:41:50
jugador service, cambiar jugador de equipo 00:41:51
A ver, es que en realidad son muy fáciles 00:41:54
Jugadores con perfil 00:41:56
Baja jugadores, que podríamos hacerlos todos 00:41:58
En realidad 00:42:00
Pero hacemos unos cuantos y ya está 00:42:01
Crear, actualizar perfil 00:42:04
Sumar horas, top perfiles por horas 00:42:06
Uy, que curioso este 00:42:08
Es que ni lo entiendo 00:42:12
Le pasas un límite 00:42:19
A la cantidad de tops 00:42:20
Como la cantidad de 00:42:22
Claro que le pasan las 00:42:24
Porque perfil que tiene 00:42:28
Perfil tiene 00:42:30
Ah, que tiene horas de juego 00:42:32
Perfil gamer 00:42:34
Te tiene que mostrar todos los perfiles 00:42:40
Que han pasado de este 00:42:42
Que han llegado a este 00:42:43
Que se han pasado de este 00:42:46
O sea, le pasas un límite de horas 00:42:47
Y te pasa todos los perfiles 00:42:48
Que han llegado 00:42:51
O que se han pasado de ese límite 00:42:54
O algo así 00:42:55
A ver, yo haría 00:42:56
De equipo service y jugador service 00:43:02
Jugador videojuego 00:43:09
Service, es que me parece un poquito 00:43:13
Un poquito 00:43:15
¿Eh? 00:43:19
O sea que, como se dice 00:43:28
Muy rígido, o sea 00:43:30
Que se nos ha puesto muy rígido, ¿no? 00:43:31
O sea que se ha puesto a hacer un service por cada entidad 00:43:34
En realidad 00:43:36
un dado por cada entidad lo entiendo 00:43:38
pero un service 00:43:41
claro, como le he pedido 00:43:43
servicios en general en plan didáctico 00:43:45
me ha pasado, pero se supone 00:43:47
que los casos de uso no están asociados 00:43:49
a jugador videojuego 00:43:51
los casos de uso están asociados al jugador 00:43:52
al videojuego, al equipo 00:43:55
no están asociados a esta relación 00:43:56
para la aplicación, esto es transparente 00:43:59
Toma ya 00:44:01
Ha sonado bien 00:44:09
Lo han entendido todos 00:44:14
No tiene sentido, por supuesto, claro 00:44:20
Pero vamos, que la idea 00:44:22
La idea que os transmito 00:44:24
Entendéis, ¿no? 00:44:26
Que se ha puesto como muy rígido 00:44:28
a hacerme los servicios 00:44:29
muy pegados al barro 00:44:31
está como muy en el barro 00:44:33
el hombre 00:44:34
vale, pues cambiar 00:44:35
posición de 00:44:39
mira, vamos a hacer 00:44:40
una cosa 00:44:43
elegid los que más os gusten, haced lo que os apetezca 00:44:44
y haced 00:44:47
todos 00:44:49
venga, ¿cuál os gusta para que traigamos 00:44:50
para el otro día? 00:44:55
la paginación lo podemos decir 00:44:55
Os gustan los competitivos 00:44:57
¿Qué os gusta? 00:45:02
Venga, vamos a hacer los competitivos 00:45:04
Por género, yo que sé que es eso 00:45:06
Pero bueno, no tengo ni idea 00:45:08
Cambiamos el nivel de un jugador 00:45:09
Vamos a cambiar el nivel de un jugador 00:45:16
Vale 00:45:19
Jugadores polivalentes 00:45:21
Venga, este nos gusta 00:45:24
Los jugadores que juegan 00:45:25
Y si va a quedar en el examen, 100%. 00:45:26
No acabo de entender muy bien qué es 00:45:28
mil juegos. 00:45:30
Pero mil juegos, ¿qué es? 00:45:36
Si quieres que te pongas en frente 00:45:39
que juegues más de dos juegos. 00:45:41
Ah, vale, vale, vale. 00:45:43
Ah, entonces es... 00:45:44
Servicios avanzados. 00:45:45
¿Alguno quiere hacer en el servicio avanzado 00:45:50
un batch processing 00:45:52
para que... 00:45:53
Si alguien quiere hacer un servicio avanzado, 00:45:56
lo hace, 00:45:58
viene y lo expone. 00:45:59
¿Vale? Que eso se os da muy bien 00:46:02
venir a exponer cosas, que lo hacéis mucho por ahí 00:46:03
en otros módulos. 00:46:05
¿Eh? 00:46:08
Puedes hacer cualquier cosa 00:46:14
siempre y cuando nosotros luego te entendamos. 00:46:15
¿Vale? 00:46:20
Porque el objetivo es que 00:46:21
te entendamos. Si te entendemos, 00:46:23
Puedes usar cualquier cosa 00:46:25
¿Vale? No, en serio 00:46:26
Si te quieres preparar cualquier cosa de estas 00:46:29
Para esta aplicación en concreto, para que así estamos situados 00:46:31
Y nos la cuentas 00:46:33
Fenomenal 00:46:35
Venga, pues ya está 00:46:37
Esto no estaba grabado todavía, ¿verdad? 00:46:41
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Segundo Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
1
Fecha:
27 de enero de 2026 - 13:04
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
46′ 43″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
212.01 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid