20260127 JPA_10 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
Y
00:02:47
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
Es
00:05:36
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
Id
00:09:28
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
el
00:09:54
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
Un
00:11:31
¿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
El
00:16:41
El
00:16:42
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
De
00:16:53
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
Es
00:32:12
Jugador barra baja
00:32:14
Id
00:32:17
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
Sí
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
Sí
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
Ya
00:40:57
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
Y
00:43:05
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
No
00:44:13
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