20260120 JPA_6 - 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 a hacernos el otro main.
00:00:00
Ahora, esta aplicación ya está llegando desde un main que es un poco feo.
00:00:09
Podría llegar desde un controlador, desde un command runner, desde yo que sé.
00:00:16
Podría llegar desde mi sitio, pero nos da igual.
00:00:22
Lo que importa es que nosotros necesitamos este de aquí.
00:00:24
¿Cómo que otra vez?
00:00:34
Sí, bueno, este main usa el DAO.
00:00:37
Buenas.
00:00:40
Vale
00:00:42
Y aquí tenemos nuestro
00:00:44
Empresa Service
00:00:46
Vale, pues ahora
00:00:47
Queremos nuestro departamento
00:00:50
Entonces, vale
00:00:52
Aquí, como
00:00:56
Estamos haciendo
00:00:58
Mucha, mi hija dio un pantalón
00:01:00
Exactamente
00:01:02
Madre mía, vale
00:01:02
Como tenemos
00:01:05
Como
00:01:07
estamos poniendo
00:01:12
a ver, no te mueras aún
00:01:15
espera unos 80 años
00:01:17
vale, como estamos haciendo muchas
00:01:19
clases y ni siquiera
00:01:25
muchas, porque estoy minimizando un poco
00:01:27
muchas cosas, pues estamos perdiendo un poco
00:01:29
la perspectiva de que todo esto
00:01:31
en realidad nos facilita
00:01:33
las cosas y nos hace la vida mucho más fácil
00:01:35
aunque no lo creamos
00:01:37
estamos perdiendo esa perspectiva
00:01:38
Porque
00:01:40
No es que te parezca como
00:01:43
Lo que estamos haciendo
00:01:46
Estamos haciendo eso tal cual
00:01:47
Hacer la aplicación
00:01:49
Una aplicación usando el DAO
00:01:51
A ver, la parte que no es bien
00:01:55
Es que nuestro
00:01:56
Intercambio con el usuario es a través de un main
00:01:58
Por consola muy feo, pero ya está
00:02:00
A ver, vale para que
00:02:02
Veas como funciona el JPA
00:02:04
los dos mails van a hacer lo mismo
00:02:06
más o menos, sí, este es el bueno
00:02:10
nada es bueno y nada es malo
00:02:13
a vuestra edad estáis con esas
00:02:14
bueno, pues a ver
00:02:16
no perdamos la perspectiva
00:02:21
de que esto nos facilita la vida
00:02:23
yo tengo el servicio
00:02:25
y ya el servicio
00:02:27
me ofrece
00:02:29
lo que a mí me dé la gana
00:02:31
hacer y ya está
00:02:33
me olvido de jdbc
00:02:34
que está por debajo, por supuesto, ahí debajo
00:02:37
escondido, de hacer la conexión
00:02:39
de hacer el selen, me olvido de todo
00:02:41
ahora mismo solo hemos hecho un método de servicio
00:02:43
y podemos haber hecho mil, todos ellos
00:02:45
apoyándose en el DAO, ahora hacemos alguno más
00:02:47
haciendo cosas
00:02:49
tremendamente complejas
00:02:50
y yo ya, mi aplicación tiene el servicio
00:02:52
llama el método que sea
00:02:55
y tan ricamente, entonces todo esto
00:02:57
la idea es que nos facilite el trabajo
00:02:59
lógicamente
00:03:01
Pues venga, vamos a recuperar nuestro departamento
00:03:02
Por ID, aquí es donde nos dan la caja
00:03:05
Con la bomba
00:03:07
¿Vale?
00:03:08
Departamento por ID
00:03:23
A ver, base de datos
00:03:24
Haced la prueba vosotros
00:03:26
Con un departamento que tengáis, yo tengo aquí
00:03:30
Tropecientos
00:03:32
Sí, porque
00:03:33
En el main anterior teníamos el insert
00:03:36
Todo el rato, vale, entonces
00:03:38
Bueno, pues voy a meter el 1
00:03:40
Para que me salga informática
00:03:42
Vosotros pues el que tengáis
00:03:43
Porque aquí lo ideal sería que empezaran a saliros
00:03:45
O salirme un montón de errores para que lo fuéramos arreglando
00:03:47
Eso sería lo bonito
00:03:50
Vale
00:03:51
Entonces
00:03:53
Pues aquí tengo yo
00:03:54
Mi departamento
00:03:57
Y efectivamente con mi departamento
00:03:59
Yo decido
00:04:02
Que hago con él
00:04:03
Vale
00:04:04
Entonces
00:04:06
Vale entonces
00:04:07
Fijaos qué bonita es mi caja con la bomba. Cuando yo lo saco con el get, no es que me dé el null sin más. Me avisa como normalmente deberíamos avisarnos entre nosotros si somos amables, que es lanzando excepciones.
00:04:13
¿Vale? Entonces el optional
00:04:28
Ahora acabamos de ver
00:04:30
Otro sentido que tiene
00:04:32
Que es, no es solamente a nivel de control
00:04:34
De código, no solamente
00:04:37
Sino que a nivel de control de código
00:04:39
Está claro, porque si yo escribo
00:04:41
Yo lo que quiero mostrar aquí es
00:04:42
Recuperar
00:04:44
Recuperar departamento por ID
00:04:46
Y aquí quiero ver la lista de empleados
00:04:50
Get empleados, pues no puedes
00:04:52
Porque esto no es el departamento, ah claro, es que es un optional
00:04:54
pues lo saco del optional, vale
00:04:56
ahora lo he sacado del optional y ahora ya
00:04:59
sí que puedo, pero
00:05:01
sacarlo del optional no me da el null
00:05:02
sin más, sacarlo
00:05:05
del optional cuando es null
00:05:07
me lanza una excepción de tipo no such
00:05:08
element de excepción
00:05:11
que es mucho más informativo
00:05:12
que un null pointer excepción
00:05:15
ahí ya te empiezas a quedar un poquito más tranquilo
00:05:16
porque
00:05:19
como si no conocieras a los hombres
00:05:20
hace el favor
00:05:25
en fin
00:05:26
media hora hablando
00:05:27
para que se enteren de cualquier mamonada
00:05:32
bueno
00:05:35
es una broma
00:05:36
es una broma
00:05:40
pero ya sabéis que todo lo digo siempre en contexto de broma
00:05:40
absolutamente todo
00:05:49
entonces por favor os pido que me disculpéis
00:05:51
todo es en contexto
00:05:54
de broma siempre, nunca jamás diría
00:05:57
esas cosas en serio
00:05:59
es que si las pensara me las fallaría, lógicamente
00:06:00
vale, pues entonces
00:06:03
¿qué vamos a hacer?
00:06:05
vamos a mostrar los empleados
00:06:09
del departamento
00:06:11
primero vamos a comprobar que esto funciona
00:06:13
vamos a mostrar
00:06:14
joder
00:06:17
¿qué coño es esto?
00:06:20
Vale, entonces ahora este se va aquí
00:06:22
Vale, pues saco mi departamento con id
00:06:38
Lo saco del optional como es si fuera null
00:06:45
Y ahora ya voy a mostrar su nombre
00:06:48
.get ms, perdón
00:06:51
y ahora
00:06:55
.getNombre
00:06:58
por ejemplo, vale, esto solamente
00:07:01
para ver si nuestra arquitectura funciona
00:07:03
porque podemos saber
00:07:05
si la arquitectura funciona, a partir de ahí es
00:07:07
ya rodar, hacer todos los métodos
00:07:09
así de carrerillo
00:07:11
pero vamos a ver si la arquitectura funciona, entonces a mi me debería
00:07:12
salir informática, no sé a vosotros
00:07:15
perfecto, como tenemos en el
00:07:17
persiste ese show
00:07:28
SQL true, pues nos saca
00:07:30
Todo esto me saca informática
00:07:32
Muy bien, vale
00:07:34
Como veis la vida nos la soluciona
00:07:35
Y si yo quiero ahora
00:07:37
Mostrar es
00:07:40
Recuperar
00:07:41
La verdad es que debería
00:07:43
Lo voy a guardar en un sitio para no tirar de él todo el rato
00:07:45
Departamento
00:07:48
De
00:07:50
Iguala
00:07:51
Lo voy a guardar ahí
00:07:52
Vale
00:07:59
Entonces, si yo aquí le doy, un segundito, vamos a probarlo,
00:08:06
el 1000 me saldrá no such element exception
00:08:10
y aquí uno siente un poco menos de ansiedad
00:08:13
que si le sale null pointer exception.
00:08:21
Bueno, a lo que íbamos.
00:08:24
Ahora, vamos a mostrar los nombres de los empleados.
00:08:26
getEmpleados.stream.
00:08:30
vale, venga
00:08:45
este departamento, vamos a sacar
00:08:48
sus empleados, todos sus
00:08:50
nombres
00:08:52
a ver, que me ha salido
00:08:53
bien, perdón
00:09:07
que me tenía que salir mal, un segundo, es que tengo una
00:09:08
un momento, un momento
00:09:11
un momento
00:09:13
si, a mi me ha salido bien
00:09:13
y me tenía que salir mal, un momento
00:09:17
estamos aquí en
00:09:18
esta
00:09:20
Vale
00:09:23
¿Cómo es que me ha salido?
00:09:27
Si está en lazy
00:09:29
Espérate a ver que estoy ejecutando
00:09:30
Estoy bien
00:09:34
Muy bueno
00:09:35
¿Por qué me ha salido bien?
00:09:47
A ver, pues esto sí que no lo entiendo.
00:10:20
Me tendría que haber salido un error de inicialización lazy de esta.
00:10:22
¿Cómo puede ser que no me haya salido?
00:10:29
Un momentito, porque esto no...
00:10:33
Error muy típico que me ha salido.
00:10:36
Cuidado que has hecho una inicialización lazy de estas.
00:10:40
¿Qué significa esto?
00:10:46
Nos vamos al modelo.
00:10:47
Departamento.
00:10:50
Departamento
00:10:50
Cuando hacemos el find
00:10:52
Para recuperarlo
00:10:54
Él, si nosotros le hemos puesto aquí
00:10:55
En la propiedad empleados de la relación
00:10:58
En la relación
00:11:00
Le habíamos puesto esto, ¿qué significaba?
00:11:01
Que en el momento de hacer el find
00:11:04
Esto no lo recupera
00:11:06
No lo recupera porque es demasiado carga
00:11:08
Demasiado pesado
00:11:10
Entonces, ¿cuándo lo va a recuperar?
00:11:11
Lo recupera cuando yo se lo pida
00:11:13
¿Vale? Cuando yo se lo pida, sí
00:11:15
Por ejemplo, aquí
00:11:17
Aquí se lo he pedido
00:11:18
Vale, entonces aquí
00:11:21
JPA va corriendo a recuperarlo
00:11:22
Pero claro, ¿qué ha ocurrido?
00:11:25
Que para poder recuperarlo
00:11:26
El contexto de persistencia tiene que seguir abierto
00:11:28
Si no, no puede
00:11:31
Y aquí el contexto de persistencia
00:11:32
Está cerrado porque el contexto de persistencia
00:11:34
Está asociado a un caso de uso
00:11:37
Que es la presencia habitual
00:11:39
Con lo cual se ha cerrado
00:11:40
Yo aquí lo siento pero
00:11:42
No puedo porque
00:11:44
Empleados no están
00:11:46
Arreglos posibles
00:11:47
Dos
00:11:49
Uno, la trampa, el feo
00:11:51
El que te permite sobrevivir
00:11:53
Pero hombre, que es un poco feo
00:11:56
Que es
00:11:58
Mira, tengo mucha prisa
00:11:59
Me han pedido el proyecto para mañana
00:12:02
A tomar por saco
00:12:04
Ahí se queda
00:12:06
Efectivamente
00:12:08
Y aquí ya, pues me lo muestra
00:12:12
Sin ningún problema
00:12:14
Pero hombre, solución fea
00:12:16
Solución fea
00:12:19
Esta, ¿verdad?
00:12:21
Normalmente, a menos que otras circunstancias
00:12:23
O lo que sea
00:12:25
Me lo digan
00:12:26
Pues yo lo pongo así
00:12:28
Entonces, solución bonita
00:12:29
Hacer un método de DAO
00:12:32
El DAO ya empieza a engordar
00:12:35
No pasa nada, los DAOs a veces engordan
00:12:37
Quedarse con cuatro métodos de cruz básicos es raro
00:12:39
Vamos a hacernos un método de DAO
00:12:42
Que sea
00:12:44
recuperar
00:12:44
del IDE con los empleados
00:12:47
¿vale?
00:12:49
recupero
00:12:51
con todos los empleados y eso me va
00:12:52
a exigir usar un JPQL
00:12:55
claro, no pasa nada
00:12:57
nos vamos a hacer un departamento
00:13:03
dado que herede del otro, con lo cual
00:13:05
tiene todo lo del otro, porque para eso
00:13:07
tenemos la herencia que la conocimos
00:13:09
y le añadimos ese
00:13:10
¿vale?
00:13:12
¿Por qué en el Windows es cambiado
00:13:14
departamento?
00:13:17
Antes había opción
00:13:18
Bueno, porque le he hecho el get
00:13:20
directamente para ahorrar líneas
00:13:23
¿Vale? Dime
00:13:24
Claro, uno que arrastra a los empleados
00:13:26
y otro que no
00:13:33
Tú decides en cada caso de uso
00:13:34
en qué te interesa usar
00:13:36
¿Vale? Uno arrastra a los empleados y otro no
00:13:39
¿Vale? En nuestro caso nos sirve
00:13:41
para hacer una búsqueda
00:13:43
de una JPQL
00:13:45
y probarla, pero bueno
00:13:46
es algo relativamente habitual que tú
00:13:48
des las dos opciones, porque si no tienes que hacer el eager
00:13:50
y si haces el eager, pues es un poco pesado
00:13:52
entonces, como conocemos
00:13:54
la herencia y somos súper expertos con la herencia
00:13:56
nos vamos ahora
00:13:58
a nuestra
00:14:00
a nuestros DAOs
00:14:01
y me voy a hacer un DAO
00:14:04
específico para departamento
00:14:06
sí, aquí sí, en la implementación
00:14:07
de DAO, entonces
00:14:12
new class
00:14:14
Departamento
00:14:16
Dao, ya no sé cómo llamarlo
00:14:24
Implementación
00:14:26
Vale, este
00:14:28
Que herede del otro
00:14:39
Para que tenga todo lo del otro
00:14:42
Este hereda de quién
00:14:43
De implementación Dao
00:14:47
Implementación Dao
00:14:49
Pero ya no hace falta
00:14:52
Que le pongamos los genéricos
00:14:54
Aquí le ponemos
00:14:55
departamento
00:14:57
y aquí le ponemos índice
00:14:59
¿Vale?
00:15:01
Hereda de este
00:15:05
Entonces
00:15:06
necesita el constructor
00:15:08
Porque los constructores nos heredan
00:15:11
¿Vale? Pero es que la propiedad
00:15:14
tipo no hace falta que se la pasemos
00:15:17
Luego el constructor lo podemos hacer así
00:15:19
Departamento.class
00:15:22
vale, ya tiene el constructor
00:15:27
porque el constructor hay que hacerlo, cuando heredamos
00:15:30
ya sabemos que se hereda todo menos los constructores
00:15:32
entonces el constructor hay que hacerlo
00:15:34
pues el constructor igual
00:15:36
al DAO este que pasa
00:15:38
la semana y eso sí, eso no cambia, hay que pasárselo
00:15:40
pero el tipo
00:15:42
no hay que pasárselo, se lo fijamos
00:15:43
ya, sabemos que es este
00:15:46
no hay que pasárselo, entonces cuando instanciemos
00:15:47
un departamento de implementación DAO
00:15:50
solamente hay que pasarle esto
00:15:52
vale, y ahora vamos a hacer aquí
00:15:54
el método específico para departamentos, que este me obtiene, si lo meto luego en un
00:15:56
opcional public, opcional departamento, getDepartamentoById con empleados, integerId, vale,
00:16:04
o sea, el general
00:16:42
está para
00:16:48
para cruz básicos
00:16:49
y si quieres algo más complejo
00:16:52
claro, claro
00:16:53
a ver que
00:16:56
de nuevo es una opción
00:16:57
que yo he elegido esta, pues para que no se nos
00:16:59
olviden de los genéricos y bueno, un poquito
00:17:02
resolver
00:17:04
es lo que más te vas
00:17:05
a ver, es lo que más te vas a encontrar yo creo
00:17:10
de cada clase un DAO, pero bueno
00:17:12
que esta opción siempre está
00:17:14
claro, lo puedes poner
00:17:15
en el genérico, efectivamente
00:17:18
y no duplicas tanto método en tanto sitio
00:17:20
vale, entonces, ahora
00:17:22
aquí sí que sí
00:17:24
tenemos que
00:17:25
buscar una sentencia, porque esto
00:17:27
recuperar departamento con empleados
00:17:29
tenemos que hacer, recuperar
00:17:32
el departamento, hacer un join
00:17:34
con los empleados, es decir, eso
00:17:35
vamos a necesitar una sentencia
00:17:37
JPQL, no sabemos
00:17:40
JPQL, no somos expertos, sabemos que es un
00:17:42
lenguaje. Entonces,
00:17:44
aquí, en nuestra
00:17:46
vida real, ¿qué haríamos?
00:17:48
Le preguntamos a HGPT. Vale, pero
00:17:50
vamos a preguntarle bien para que nos
00:17:52
entienda y no nos diga una tontería.
00:17:53
Pues venga, ¿qué le preguntaríais?
00:17:56
¿Cómo se lo preguntáis?
00:17:58
¿Cómo preguntáis vosotros?
00:18:01
Le pasas el proyecto,
00:18:03
el usuario mensaje y le dices
00:18:05
necesito esto.
00:18:07
Le pasas el usuario, la contraseña
00:18:09
al administrador y le dices que lo haga.
00:18:11
A ver, ¿preguntamos a mi manera o a la vuestra?
00:18:12
A ver.
00:18:18
A mi manera.
00:18:19
La mía es dándole explicaciones como si fuera un humano.
00:18:21
La vuestra es copia y pega y pototún.
00:18:27
Vale.
00:18:30
Venga, voy a ser más...
00:18:31
O sea, ¿copiaríais y pegaríais así directamente?
00:18:36
Departamento
00:18:38
Venga, voy a hacérselo
00:18:45
Es que copiar y pegar
00:18:48
Casi departamento
00:18:49
Que tiene
00:18:51
Una lista
00:18:52
De empleados
00:18:55
Empleados
00:18:58
Eh
00:19:02
JPA
00:19:04
Necesito
00:19:08
JPQL
00:19:10
Que me
00:19:12
Recupere
00:19:14
Departamento
00:19:16
Con todos
00:19:19
Los empleados
00:19:20
Para saltarme
00:19:22
El lazy
00:19:25
Para que entienda un poco mejor
00:19:27
Vale
00:19:28
JPQL de manual
00:19:30
Pero nosotros no tenemos el manual
00:19:35
Este es nuestro departamento
00:19:37
Con el Lazy, este es empleado
00:19:43
JPQL, correcto
00:19:45
Este de aquí
00:19:48
Uso, mira, nos da hasta el uso y todo
00:19:49
Pues venga, a lo tuneamos
00:19:53
Copiar código
00:19:56
Lo voy a copiar aquí
00:19:58
Si no se lo habéis pedido vosotros
00:20:04
Lo copiáis ahora
00:20:05
vale, selectD
00:20:08
de la clase departamentoD con alias
00:20:11
uneme
00:20:13
con empleados
00:20:15
where D
00:20:18
igual a ID
00:20:19
ID, getSingleResult
00:20:20
me da departamento y ahora
00:20:23
return
00:20:25
opcional
00:20:25
punto
00:20:30
of nullable
00:20:32
D
00:20:35
Así de fácil
00:20:36
La vida ahora es mucho mejor
00:20:43
Ahora con SAGPT
00:20:45
Que antes pues teníamos que dedicar
00:20:46
Un montón de tiempo
00:20:49
A aprender más
00:20:50
JPQL
00:20:53
Ahora ya con saber de qué va
00:20:54
Y para qué sirve
00:20:56
¿Eh?
00:20:58
¿Otra vez?
00:21:07
Lo de que bloquean las IPs
00:21:08
Para estar bloqueada
00:21:10
Para que va a estar bloqueada
00:21:12
Para que la gente no le saque el trabajo adelante
00:21:16
A ver, yo no me pondría trabas
00:21:18
A mi propio negocio
00:21:22
Toda la gente que conozco
00:21:23
Que está trabajando en esto
00:21:31
Usa en su trabajo guías
00:21:32
Que me vaya a donde
00:21:34
Alguien ha dicho que me mueva a algún lado
00:21:37
A ver, la izquierda cual es
00:21:39
La otra izquierda
00:21:43
Esta
00:21:45
y si os vais a una empresa
00:21:47
que os capa todas las sillas
00:21:51
para que lo hagáis todo consultando
00:21:54
manuales o de memoria
00:21:56
pues yo qué sé, yo me mosquearía
00:21:57
no sé, entonces
00:22:00
yo qué sé, será la empresa de un abuelito
00:22:04
cebolleta, yo qué sé, no sé
00:22:06
vale
00:22:08
vale, pues a ver, con suerte nos lo ha dicho bien
00:22:09
a mí me suena bien
00:22:14
esta JPQL
00:22:15
me suena estupenda
00:22:17
podríamos hasta leer la explicación
00:22:18
lo ideal sería que leyéramos toda la explicación
00:22:20
que nos ha dado, porque así hasta esta búsqueda
00:22:23
nos ayuda a aprender un poquito más
00:22:25
que luego se nos va a olvidar
00:22:27
15 minutos
00:22:29
vale
00:22:31
entonces, ahora
00:22:33
servicio
00:22:35
a ver, voy a copiar
00:22:38
este
00:22:47
el de tune null
00:22:48
después de ponerle optional
00:22:52
es a mala leche
00:22:54
espera, espera
00:22:55
no, pero aquí no quiero
00:22:56
el optional, en el DAO no quiero
00:23:00
el optional, el DAO tiene que ser
00:23:02
lo más sencillo
00:23:04
posible, el servicio es el que ya
00:23:06
tunea a su modo
00:23:08
el DAO lo más
00:23:09
simple
00:23:14
el servicio que decida
00:23:16
qué es lo que le gusta, qué es lo que no le gusta
00:23:18
¿dónde hay un optional?
00:23:20
no, lo he quitado
00:23:24
lo he quitado porque
00:23:25
cuando me he ido a hacer el servicio he dicho
00:23:26
no, no, el optional lo quiero aquí, no lo quiero en el down
00:23:28
vale
00:23:30
a ver, de nuevo repito
00:23:32
esto no es dónde va, dónde no va
00:23:34
esto es así, esto no es así
00:23:36
esto es que os flexibilicéis
00:23:38
que entendáis los fundamentos generales
00:23:41
del mundo
00:23:43
y que
00:23:43
cojáis un criterio
00:23:45
y que os fortalezcáis,
00:23:46
que sobreviváis, que seáis unos
00:23:49
tíos espabilados, que
00:23:51
vayáis a la empresa y os diga
00:23:53
jo, este tío realmente
00:23:55
me mola. Este es el objetivo, ¿no?
00:23:56
Esto es así o esto no es así.
00:23:59
Vale. Empresa, service,
00:24:01
ahora ya sí.
00:24:03
Recuperar departamento
00:24:05
y de con empleados.
00:24:07
Con
00:24:10
empleados.
00:24:11
Ahora ya sí
00:24:12
Pues en lugar de llamar
00:24:14
En lugar de implementar este DAO
00:24:15
En lugar de implementar este
00:24:18
Implementamos el
00:24:20
Departamento
00:24:22
DAO
00:24:23
Bueno, en realidad estoy poniendo la referencia
00:24:30
Todo el rato así, podría poner generic DAO
00:24:32
Estoy poniendo todo el rato
00:24:34
Aquí también he puesto la implementación
00:24:35
Podría poner generic DAO
00:24:37
Pero no
00:24:40
Que la referencia que estoy poniendo
00:24:41
Estoy poniendo todo el rato
00:24:43
la concreta
00:24:44
podría poner la superclase
00:24:46
última máxima que es lo natural
00:24:48
es lo que, ¿vale?
00:24:50
es decir, aquí podría poner generic dao
00:24:52
en vez de esto
00:24:54
¿verdad?
00:24:55
generic dao
00:24:59
¿no?
00:25:00
claro
00:25:04
y luego ya cuando la instancio
00:25:05
new que hereda de este
00:25:07
pues lo mismo
00:25:09
cuando la instancio
00:25:12
Aquí no instancio
00:25:14
Esto, aquí instancio
00:25:15
Departamento implementación DAO
00:25:17
Departamento
00:25:19
Sí, ahora la quito
00:25:21
Implementación DAO
00:25:25
Donde este se va
00:25:27
Y esto
00:25:30
Hace esto
00:25:32
Y
00:25:33
Bueno, espera
00:25:34
Claro que no es genérico, perdón
00:25:43
Vale, ya está
00:25:44
Y ahora ya
00:25:47
del DAO, no le llamo a su
00:25:49
get, sino que llamo a
00:25:51
su
00:25:53
ah bueno, perdón, claro no, este lo tengo
00:25:54
que no
00:25:59
sí, o castear o este lo tendría
00:26:03
que meter, vale
00:26:05
lógicamente es como lo he
00:26:07
la referencia la he declarado como superclase
00:26:09
no tiene el get por empleados
00:26:11
entonces
00:26:13
podría meterlo aquí
00:26:14
en el genérico
00:26:16
podría meterlo sin cuerpo
00:26:18
pero entonces tendría que convertirla en abstracta
00:26:23
¿vale? que también podría hacerlo así
00:26:26
no hay ningún problema, porque luego
00:26:28
no esté instanciando de generic DAO en particular
00:26:29
entonces los métodos que están
00:26:32
en las subclases
00:26:34
los metería arriba, terminados
00:26:35
en punto y coma, vacíos, porque ya se
00:26:38
sobreescribirán, y eso me convertiría
00:26:39
generic DAO en clase abstracta
00:26:42
y ya está, y no pasa nada, se convierte
00:26:43
en clase abstracta y se acabó
00:26:46
pero no nos vamos a complicar la vida cambiando eso ahora
00:26:47
para no liarnos, vamos simplemente a
00:26:50
poner aquí departamento implementación
00:26:51
DAO y se acabó, que es más fácil
00:26:54
Sí, me obligaría a implementarla
00:26:55
en implementación DAO, pero podría
00:27:05
hacer la abstracta también, pero claro
00:27:07
en este caso no quiero hacer esa abstracta
00:27:09
porque entonces tendría que
00:27:11
cambiar el diseño haciendo esa abstracta
00:27:12
y luego hacer otras dos que hereden de la abstracta
00:27:15
y ya implementen lo demás
00:27:18
entonces quedaría más chungo
00:27:19
Entonces venga, así y ya está
00:27:21
Departamento implementación DAO
00:27:24
Que departamento implementación DAO
00:27:26
No es
00:27:28
Así, vale, ya está
00:27:29
Vale, más bonito
00:27:32
Y ahora ya
00:27:35
Departamento
00:27:36
DAO punto, ahora ya sí
00:27:40
Get departamento con empleados
00:27:41
Con ID
00:27:43
Bueno, pues si no tiene
00:27:45
La lista estará vacía
00:27:57
Pero al menos no te da
00:27:58
Leis, inicialización, exception
00:28:00
Simplemente la lista es vacía
00:28:02
La información la tienes
00:28:04
Tanto de si es vacía como si es con
00:28:06
Vale, pues ya tenemos
00:28:08
Este servicio de aquí
00:28:09
Y ya lo podemos usar
00:28:12
Desde nuestro main2
00:28:14
Entonces, aquí deberíamos poner
00:28:15
Esto, como ahora lo subo
00:28:18
Todo este proyecto
00:28:20
Lo subo ahora
00:28:22
Esto me da
00:28:24
Lazy
00:28:26
Initialization
00:28:27
Exception
00:28:30
Nos da esto
00:28:33
Dime
00:28:34
¿Cómo he hecho para que me dé qué?
00:28:35
Porque se os habrá olvidado
00:28:41
Cerrar el end.close aquí
00:28:43
Por eso no os da
00:28:45
Porque se me había olvidado a mí también
00:28:47
Pero es un olvido, debería cerrarse
00:28:51
Si quieres que sea lazy, que es lo normal
00:28:54
A ver, entonces
00:28:59
Aquí ahora ya, esto nos da
00:29:01
Iniciación de exception, lo quitamos
00:29:03
Y ahora ya sí que vamos a recuperar
00:29:05
Los empleados para que veamos que no nos dan
00:29:07
D, D ahora va a ser
00:29:09
el servicio punto
00:29:15
recuperar departamento id con empleados
00:29:17
el 1
00:29:20
y lo saco del
00:29:21
opcional
00:29:25
con el get
00:29:26
y ahora ya sí que me voy a hacer el
00:29:27
d.get empleados
00:29:31
bueno, la sentencia de antes
00:29:33
¿Pero no hay departamento disponible?
00:29:34
¿Cómo?
00:29:38
Ah, que tú quieres
00:29:39
Vale, esto
00:29:40
ya no me da el lazy
00:29:43
porque es lazy pero
00:29:45
he forzado con el JPQL
00:29:48
el volcado de los empleados
00:29:50
entonces vamos a ver
00:29:52
si es verdad
00:29:54
aquí tengo a los empleados
00:29:55
¿vale?
00:30:03
correcto
00:30:12
¿qué?
00:30:13
si, este proyecto lo voy a subir
00:30:15
por eso estoy poniendo comentarios
00:30:17
¿vale?
00:30:19
y si yo ahora tuviera
00:30:27
un caso de uso que fuera
00:30:28
por ejemplo
00:30:30
Recuperar los empleados
00:30:42
De un departamento
00:30:47
Empleados
00:30:48
Inter
00:31:00
No, espera, no, no
00:31:02
No era esta la que yo quería
00:31:04
Porque esta es una tontería
00:31:06
Esto lo tengo en el de arriba
00:31:08
No, no, no, yo quería eso
00:31:11
Quería
00:31:12
A ver
00:31:15
¿Qué tal que yo tenía aquí pensado?
00:31:19
Este es el
00:31:25
Vale
00:31:27
Si era lo que yo quería hacer
00:31:41
Integer, perdón
00:31:52
Vale, pero
00:32:02
Bueno, espérate
00:32:15
Vale, pues ahora
00:32:17
Este, haced este servicio vosotros
00:32:23
Pero
00:32:28
No tenemos los métodos de arriba
00:32:28
O sea, no apoyándoos en otro método
00:32:32
del servicio, no apoyando a otro método
00:32:34
del servicio, entonces aquí
00:32:36
apoyándose directamente en el DAO
00:32:37
estos no los tenemos
00:32:39
porque el único caso de uso
00:32:41
que yo tengo que hacer, a lo mejor es este
00:32:43
estos no los tengo
00:32:46
entonces apoyándose en el DAO
00:32:47
entonces apoyándose en el DAO
00:32:49
haced este vosotros
00:32:52
si tenéis que meter
00:32:54
algún método más
00:32:56
en algún DAO o crear el DAO
00:32:57
de empleado, crearlo
00:33:00
a ver que, como sale
00:33:01
en 10 minutos. ¿Qué cuestiones se os plantean y cómo
00:33:03
lo hacéis?
00:33:05
Recuperar empleados por ID.
00:33:07
Por ID del departamento.
00:33:09
Recuperar empleados que trabaja en un departamento.
00:33:11
Entonces, recuperar
00:33:14
empleados de
00:33:15
departamento.
00:33:16
¿Vale?
00:33:19
Tuvierais que hacer esto con la salvedad
00:33:21
de que estos de arriba no están
00:33:23
hechos y no hay que apoyarse en ellos.
00:33:25
No os podéis apoyar en ellos.
00:33:27
¿Qué es lo que se hace en la generación de empleados?
00:33:29
Porque estos trabajan siempre empleados.
00:33:31
A ver, tú haz lo que harías
00:33:32
¿Vale? Sí
00:33:36
Haz lo que tú harías
00:33:37
- 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 - 12:59
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 33′ 42″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 145.98 MBytes