Saltar navegación

20260120 JPA_6 - 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 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
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
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
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
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
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

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid