1 00:00:00,000 --> 00:00:03,480 Venga, a ver, vamos a revisar rápidamente el main ese que 2 00:00:03,480 --> 00:00:06,799 hemos hecho, que decía él por si alguien, ¿vale? 3 00:00:06,860 --> 00:00:11,019 Pues, a ver, este es la unidad de persistencia o el contexto de 4 00:00:11,019 --> 00:00:11,619 persistencia. 5 00:00:11,699 --> 00:00:15,400 Dentro de él y hasta que aparezca un close, 6 00:00:16,239 --> 00:00:20,519 podemos manejar objetos persistentes y también que no 7 00:00:20,519 --> 00:00:22,239 lo sean, por supuesto, transitorios. 8 00:00:22,980 --> 00:00:25,679 Bueno, siempre se recomienda trabajar en el contexto de 9 00:00:25,679 --> 00:00:26,260 transacciones. 10 00:00:26,260 --> 00:00:28,339 Cuando se modifica la base de datos, obligatorio, 11 00:00:28,339 --> 00:00:30,000 aunque no sea transacción como tal 12 00:00:30,000 --> 00:00:32,600 porque no tengo varias sentencias, pero no ha sido obligatorio 13 00:00:32,600 --> 00:00:33,119 si no, no 14 00:00:33,119 --> 00:00:38,179 ¿lo sentís mucho? 15 00:00:38,280 --> 00:00:40,119 no, es mentira, no lo sentís mucho 16 00:00:40,119 --> 00:00:40,920 es una forma de hablar 17 00:00:40,920 --> 00:00:43,520 ¿lo sentís mucho de verdad? 18 00:00:44,399 --> 00:00:46,280 pero, ah, vale, vale 19 00:00:46,280 --> 00:00:50,320 ¿desde cuándo no se puede subir 20 00:00:50,320 --> 00:00:51,200 hasta menos de 20? 21 00:00:53,579 --> 00:00:54,700 eso yo no lo sé 22 00:00:54,700 --> 00:00:55,920 eso yo no tengo ni idea 23 00:00:55,920 --> 00:00:57,399 pregunto al agajo, no tengo ni idea 24 00:00:57,399 --> 00:00:59,679 ¿Y eso qué significa? 25 00:00:59,740 --> 00:01:01,340 Significa nada, no lo sé 26 00:01:01,340 --> 00:01:04,280 Vale, a mí nada 27 00:01:04,280 --> 00:01:05,200 Venga, volvemos 28 00:01:05,200 --> 00:01:07,079 Este es el contexto de persistencia 29 00:01:07,079 --> 00:01:09,840 Recomendable, trabajar con transacciones 30 00:01:09,840 --> 00:01:12,019 Obligatorio cuando se modifica la base de datos 31 00:01:12,019 --> 00:01:14,019 Cuando solo se consulta no, pero bueno 32 00:01:14,019 --> 00:01:14,579 Es un hábito 33 00:01:14,579 --> 00:01:16,700 ¿Qué habíamos hecho en este mail? 34 00:01:17,359 --> 00:01:20,340 Creamos un objeto, ahora mismo es transitorio 35 00:01:20,340 --> 00:01:20,939 Y ya está 36 00:01:20,939 --> 00:01:23,719 Con persist lo hacemos persistente 37 00:01:23,719 --> 00:01:25,000 Lo cual tiene como efecto 38 00:01:25,000 --> 00:01:27,140 Insertarlo en la base de datos 39 00:01:27,140 --> 00:01:29,840 ¿Vale? Como la clave es autogenerada 40 00:01:29,840 --> 00:01:31,260 Se quedará una clave y ya está 41 00:01:31,260 --> 00:01:33,780 Si no fuera clave autogenerada 42 00:01:33,780 --> 00:01:35,459 Si la clave primaria fuera el nombre 43 00:01:35,459 --> 00:01:37,400 Por ejemplo, y ya hubiera uno que se llama casa 44 00:01:37,400 --> 00:01:40,140 Si probáis a hacerlo, veréis como dice 45 00:01:40,140 --> 00:01:42,000 Un error de clave primaria 46 00:01:42,000 --> 00:01:43,099 Pero bueno, será esperable 47 00:01:43,099 --> 00:01:46,959 Claro, claro 48 00:01:46,959 --> 00:01:49,459 Si como consecuencia, porque lo que 49 00:01:49,459 --> 00:01:52,040 Por debajo llama esto es a un insert de jdbc 50 00:01:52,040 --> 00:01:53,620 Si ese insert falla, pues se lo va a decir 51 00:01:53,620 --> 00:01:56,140 Claro, ahora, ¿qué habíamos hecho en este main? 52 00:01:56,140 --> 00:01:58,719 Cogíamos un empleado al que le íbamos a poner 53 00:01:58,719 --> 00:02:00,500 Este departamento porque lo queríamos cambiar 54 00:02:00,500 --> 00:02:03,019 Con este método find que te recupera 55 00:02:03,019 --> 00:02:04,239 Por clave primaria 56 00:02:04,239 --> 00:02:06,540 ¿Vale? Y le decimos 57 00:02:06,540 --> 00:02:07,980 A qué clase va a caer 58 00:02:07,980 --> 00:02:09,879 Bueno, ahora 59 00:02:09,879 --> 00:02:14,020 Cogíamos 60 00:02:14,020 --> 00:02:17,199 Esto para mostrarle para el empleado 61 00:02:17,199 --> 00:02:19,719 Ahora le cambiamos el departamento 62 00:02:19,719 --> 00:02:20,840 Es decir, a este empleado 63 00:02:20,840 --> 00:02:23,919 Le poníamos el departamento 64 00:02:23,919 --> 00:02:25,599 Nuevo que acabamos de coger 65 00:02:25,599 --> 00:02:27,780 Le poníamos ese departamento 66 00:02:27,780 --> 00:02:30,460 ¿Vale? Hacíamos la transacción 67 00:02:30,460 --> 00:02:31,340 Para que se hiciera 68 00:02:31,340 --> 00:02:33,819 Y ahora, yo ahora 69 00:02:33,819 --> 00:02:35,300 Esto no estaba antes 70 00:02:35,300 --> 00:02:38,139 Yo ahora quiero acceder 71 00:02:38,139 --> 00:02:39,780 Al objeto departamento 72 00:02:39,780 --> 00:02:42,240 Y a sus empleados en particular 73 00:02:42,240 --> 00:02:44,479 Que tendrá este nuevo 74 00:02:44,479 --> 00:02:45,419 Que le acabo de meter 75 00:02:45,419 --> 00:02:47,620 No era un departamento nuevo, tendrá este nuevo 76 00:02:47,620 --> 00:02:50,280 Pero claro, lo que yo quería hacer antes 77 00:02:50,280 --> 00:02:52,300 Es, oye, como he hecho cambios 78 00:02:52,300 --> 00:02:54,139 En los objetos, refrescámelo 79 00:02:54,139 --> 00:02:57,520 ¿Vale? O sea, a empleado le he cambiado 80 00:02:57,520 --> 00:02:58,319 El departamento 81 00:02:58,319 --> 00:03:01,180 Refrescame departamento 82 00:03:01,180 --> 00:03:02,960 Para que se actualice 83 00:03:02,960 --> 00:03:04,139 Su propiedad de empleados 84 00:03:04,139 --> 00:03:05,479 Entonces yo estaba enterrada en el flush 85 00:03:05,479 --> 00:03:08,960 Y luego ya me dio la cabeza que era el refresh 86 00:03:08,960 --> 00:03:11,000 ¿Vale? Entonces ahora ya sí 87 00:03:11,000 --> 00:03:13,240 Vamos a coger los empleados 88 00:03:13,240 --> 00:03:15,219 De departamento, que me va a aparecer este 89 00:03:15,219 --> 00:03:16,240 Que le acabo de meter 90 00:03:16,240 --> 00:03:19,159 Me va a aparecer este y aquí pues uno ya hace 91 00:03:19,159 --> 00:03:21,060 Lo que le dé la gana, en mi caso era el stream 92 00:03:21,060 --> 00:03:22,639 Pero eso ya lo habíamos metido en otro sitio 93 00:03:22,639 --> 00:03:24,199 y ya está 94 00:03:24,199 --> 00:03:26,659 vale, esto en cuanto a esto de aquí 95 00:03:26,659 --> 00:03:28,939 ahora, el otro método 96 00:03:28,939 --> 00:03:30,020 que habíamos probado 97 00:03:30,020 --> 00:03:34,300 el flush 98 00:03:34,300 --> 00:03:35,840 creo recordar que te 99 00:03:35,840 --> 00:03:37,759 si tú has hecho un 100 00:03:37,759 --> 00:03:40,159 un get 101 00:03:40,159 --> 00:03:42,219 o sea, si tú has hecho un cambio en la base de datos 102 00:03:42,219 --> 00:03:43,960 te refresca ese cambio 103 00:03:43,960 --> 00:03:46,479 pero aquí no ha sido eso, aquí hemos cambiado 104 00:03:46,479 --> 00:03:48,659 los objetos, o sea, el flush es con la base 105 00:03:48,659 --> 00:03:50,300 de datos, el refresh es 106 00:03:50,300 --> 00:03:51,819 sincronización entre los objetos 107 00:03:51,819 --> 00:03:55,280 ¿vale? es decir, yo aquí he cambiado 108 00:03:55,280 --> 00:03:56,300 el departamento 109 00:03:56,300 --> 00:03:59,020 ¿vale? he cambiado el departamento y ya está 110 00:03:59,020 --> 00:04:01,039 y esto de hecho 111 00:04:01,039 --> 00:04:02,800 lo podría quitar, no me hace falta 112 00:04:02,800 --> 00:04:04,719 esto no, la base de datos 113 00:04:04,719 --> 00:04:06,919 entonces, hibernate deja 114 00:04:06,919 --> 00:04:08,819 marcado en su mundo 115 00:04:08,819 --> 00:04:10,819 de los objetos, él va dejando 116 00:04:10,819 --> 00:04:12,740 las marcas de lo que va haciendo para cuando 117 00:04:12,740 --> 00:04:14,560 luego te da que hacer commit o lo que sea 118 00:04:14,560 --> 00:04:16,560 ¿vale? cuando luego te da que hacer 119 00:04:16,560 --> 00:04:18,680 pues en el mundo de los objetos, él ya deja 120 00:04:18,680 --> 00:04:20,699 marcado que este empleado está 121 00:04:20,699 --> 00:04:22,600 en este departamento, pero yo 122 00:04:22,600 --> 00:04:24,379 el objeto correspondiente lo quiero 123 00:04:24,379 --> 00:04:26,519 sincronizar, o sea, el rifle es una sincronización 124 00:04:26,519 --> 00:04:28,620 entre los objetos, para que los objetos queden coherentes 125 00:04:28,620 --> 00:04:30,699 pero no estoy haciendo nada con la base de datos 126 00:04:30,699 --> 00:04:31,660 ¿vale? 127 00:04:32,879 --> 00:04:35,180 entonces, ahora ya el objeto departamento 128 00:04:35,180 --> 00:04:36,819 el contexto de persistencia 129 00:04:36,819 --> 00:04:38,839 lo refresca para que se quede 130 00:04:38,839 --> 00:04:40,720 coherente con esto que acabo de hacer 131 00:04:40,720 --> 00:04:41,959 para que se quede coherente 132 00:04:41,959 --> 00:04:44,980 que luego yo todo esto que estoy haciendo en los objetos 133 00:04:44,980 --> 00:04:47,139 quiero ya que se refleje en la base de datos 134 00:04:47,139 --> 00:04:48,740 pues entonces ya hago el comando 135 00:04:48,740 --> 00:04:49,839 ¿vale? 136 00:04:50,699 --> 00:04:52,639 el flush es pues eso 137 00:04:52,639 --> 00:04:54,579 ha habido un cambio en la base de datos y yo quiero que mis objetos 138 00:04:54,579 --> 00:04:55,939 se enteren, hago un flush y ya está 139 00:04:55,939 --> 00:05:01,139 yo no lo he probado 140 00:05:01,139 --> 00:05:02,339 pero es como se supone que funciona 141 00:05:02,339 --> 00:05:03,139 vale 142 00:05:03,139 --> 00:05:06,420 vale, entonces 143 00:05:06,420 --> 00:05:08,139 ahora, siguiente método que habíamos 144 00:05:08,139 --> 00:05:10,060 hecho, pues este 145 00:05:10,060 --> 00:05:12,639 otro contexto de persistencia, nos cogíamos 146 00:05:12,639 --> 00:05:14,779 el departamento, cogíamos 147 00:05:14,779 --> 00:05:17,060 sus empleados, les cambiábamos 148 00:05:17,060 --> 00:05:18,879 el nombre y ya hemos visto que funciona 149 00:05:18,879 --> 00:05:21,019 y ya está, algunas pruebitas que hemos hecho 150 00:05:21,019 --> 00:05:23,060 para ver un poquito por encima cómo funciona JPA 151 00:05:23,060 --> 00:05:24,860 que habéis visto 152 00:05:24,860 --> 00:05:27,319 que es más fácil, trabajo con los objetos 153 00:05:27,319 --> 00:05:28,620 y me olvido del JDBC 154 00:05:28,620 --> 00:05:30,959 y del SQL 155 00:05:30,959 --> 00:05:33,259 me olvido del SQL entre comillas 156 00:05:33,259 --> 00:05:35,060 porque 157 00:05:35,060 --> 00:05:37,199 sí, bueno, eso por 158 00:05:37,199 --> 00:05:39,060 descontado, pero también 159 00:05:39,060 --> 00:05:40,800 me olvido, pero perdón 160 00:05:40,800 --> 00:05:42,600 tampoco me puedo olvidar del todo 161 00:05:42,600 --> 00:05:44,879 porque si yo quiero hacer consultas raras 162 00:05:44,879 --> 00:05:47,399 que no sea una por clave primaria 163 00:05:47,399 --> 00:05:48,339 como me la da el FINE 164 00:05:48,339 --> 00:05:50,959 la tengo que hacer con un lenguaje propio 165 00:05:50,959 --> 00:05:53,180 de JPA que es el JPQL 166 00:05:53,180 --> 00:05:54,980 que se parece mucho al SQL 167 00:05:54,980 --> 00:05:55,800 pero no lo es 168 00:05:55,800 --> 00:05:59,120 ¿vale? entonces yo quiero 169 00:05:59,120 --> 00:06:00,360 recógeme 170 00:06:00,360 --> 00:06:03,120 los empleados cuyo departamento 171 00:06:03,120 --> 00:06:04,500 empieza por 172 00:06:04,500 --> 00:06:05,939 mayúscula 173 00:06:05,939 --> 00:06:08,959 esa consulta JPA no la tiene, la tenemos que construir 174 00:06:08,959 --> 00:06:10,879 entonces tendríamos 175 00:06:10,879 --> 00:06:12,120 que hacer un JP 176 00:06:12,120 --> 00:06:14,279 una sentencia JPQL 177 00:06:14,279 --> 00:06:16,339 que es muy parecida a SQL 178 00:06:16,339 --> 00:06:17,740 por ejemplo 179 00:06:17,740 --> 00:06:19,360 Vamos a hacer aquí 180 00:06:19,360 --> 00:06:21,740 Vamos a hacer una consulta 181 00:06:21,740 --> 00:06:21,980 Que 182 00:06:21,980 --> 00:06:26,100 Recoger 183 00:06:26,100 --> 00:06:27,720 Todos los 184 00:06:27,720 --> 00:06:29,639 Empleados 185 00:06:29,639 --> 00:06:34,660 Que 186 00:06:34,660 --> 00:06:38,000 Recoger por otro campo, ya está, más sencillo 187 00:06:38,000 --> 00:06:42,680 Todos los empleados que se llamen 188 00:06:42,680 --> 00:06:43,980 Ana barra baja 189 00:06:43,980 --> 00:06:45,399 Como tengo dos me dará dos 190 00:06:45,399 --> 00:06:47,079 Vale, pues a ver 191 00:06:47,079 --> 00:06:48,879 O sea, recoger empleados por nombre 192 00:06:48,879 --> 00:06:49,600 En definitiva 193 00:06:49,600 --> 00:06:52,360 Vamos a hacernos aquí un método 194 00:06:52,360 --> 00:06:54,300 Ahí mismo 195 00:06:54,300 --> 00:06:59,199 Entonces 196 00:06:59,199 --> 00:07:01,160 Esto me va a dar 197 00:07:01,160 --> 00:07:02,779 Una lista de empleados 198 00:07:02,779 --> 00:07:25,959 Vale, pues aquí tendría que hacer 199 00:07:25,959 --> 00:07:27,480 Esto también 200 00:07:27,480 --> 00:07:34,529 De nuevo, como aquí voy a leer 201 00:07:34,529 --> 00:07:36,430 La transacción 202 00:07:36,430 --> 00:07:37,490 No es obligatoria 203 00:07:37,490 --> 00:07:39,329 Pero bueno, es un buen hábito 204 00:07:39,329 --> 00:07:41,310 Ponerla siempre 205 00:07:41,310 --> 00:07:44,649 Porque no molesta, desde luego daño no va a hacer 206 00:07:44,649 --> 00:07:56,490 Y aquí tendríamos 207 00:07:56,490 --> 00:07:58,649 un em.close 208 00:07:58,649 --> 00:08:00,750 Vale, pues aquí es donde tenemos que 209 00:08:00,750 --> 00:08:03,050 ver qué hago yo para sacar esta lista 210 00:08:03,050 --> 00:08:04,230 de empleados 211 00:08:04,230 --> 00:08:07,370 Esta lista de aquí, ¿cómo la saco? 212 00:08:07,790 --> 00:08:09,110 Esto va a ser una query, tenemos que 213 00:08:09,110 --> 00:08:09,709 hacer una query 214 00:08:09,709 --> 00:08:12,870 El find de em 215 00:08:12,870 --> 00:08:13,490 no nos vale 216 00:08:13,490 --> 00:08:17,009 Este, bueno, no vale 217 00:08:17,009 --> 00:08:19,129 porque este recupera por clave primaria 218 00:08:19,129 --> 00:08:19,870 solamente 219 00:08:19,870 --> 00:08:22,930 Vale, pues entonces, tenemos que 220 00:08:22,930 --> 00:08:24,550 hacer una consulta en el lenguaje 221 00:08:24,550 --> 00:08:26,129 jpul 222 00:08:26,129 --> 00:08:28,189 una query 223 00:08:28,189 --> 00:08:29,610 en el lenguaje jpql 224 00:08:29,610 --> 00:08:32,350 jpql es muy parecido 225 00:08:32,350 --> 00:08:34,090 a sql, muy parecido 226 00:08:34,090 --> 00:08:34,850 pero 227 00:08:34,850 --> 00:08:37,809 los nombres de las tablas 228 00:08:37,809 --> 00:08:39,970 ahora serán los nombres de las clases 229 00:08:39,970 --> 00:08:42,190 y los nombres de los 230 00:08:42,190 --> 00:08:44,269 campos ahora serán los nombres 231 00:08:44,269 --> 00:08:45,269 de las propiedades 232 00:08:45,269 --> 00:08:48,090 para todo lo demás 233 00:08:48,090 --> 00:08:49,649 sería casi equivalente 234 00:08:49,649 --> 00:08:51,769 pero tú en sql que haces 235 00:08:51,769 --> 00:08:53,590 consultas en tablas 236 00:08:53,590 --> 00:08:55,409 nombres de campos 237 00:08:55,409 --> 00:09:17,830 Pues aquí consultas en nombres de clases, nombres de propiedades. Entonces, en JPQL, pues uno lo puede estudiar al detalle o ver un poquito por encima cómo funciona para saberlo y luego ya cuando tiene que hacer algo, preguntárselo a HGPT. Esa sería nuestra opción, lógicamente. 238 00:09:17,830 --> 00:09:20,049 saber de qué va, cómo funciona 239 00:09:20,049 --> 00:09:21,990 y uno quiere... 240 00:09:21,990 --> 00:09:24,090 No, en el examen no, porque yo en el examen no te pido 241 00:09:24,090 --> 00:09:26,269 cosas muy específicas. 242 00:09:26,950 --> 00:09:27,950 Te pido lo que hemos 243 00:09:27,950 --> 00:09:28,629 mencionado aquí. 244 00:09:30,970 --> 00:09:32,129 Entonces, todo lo que 245 00:09:32,129 --> 00:09:34,169 os pido en el examen, lo sabéis 246 00:09:34,169 --> 00:09:36,049 hacer. Luego, otra 247 00:09:36,049 --> 00:09:37,769 cosa es que uno ya se ponga a hacer un proyecto que 248 00:09:37,769 --> 00:09:39,389 necesita cosas muy específicas. 249 00:09:40,029 --> 00:09:41,789 Uy, una consulta que me tiene que hacer, 250 00:09:41,889 --> 00:09:43,750 coger la inicial de no sé qué y hacerme 251 00:09:43,750 --> 00:09:45,730 no sé cuántos, pues esa consulta, 252 00:09:45,730 --> 00:09:48,789 como la tienes muy acotada lo que quieres 253 00:09:48,789 --> 00:09:50,690 se la pides, esa es nuestra manera 254 00:09:50,690 --> 00:09:51,730 de trabajar, verdad 255 00:09:51,730 --> 00:09:54,669 vale, pero esta query es facilita, esta query 256 00:09:54,669 --> 00:09:57,169 es, vamos a seleccionar 257 00:09:57,169 --> 00:09:59,230 el que vamos a seleccionar 258 00:09:59,230 --> 00:10:00,870 todo un empleado 259 00:10:00,870 --> 00:10:01,389 entero 260 00:10:01,389 --> 00:10:04,610 empleado, obligatorio poner 261 00:10:04,610 --> 00:10:06,070 un alias en JPQL 262 00:10:06,070 --> 00:10:09,159 from 263 00:10:09,159 --> 00:10:12,539 ¿de qué tabla? from empleado 264 00:10:12,539 --> 00:10:16,600 no, pero estoy seleccionando empleados por nombre 265 00:10:16,600 --> 00:10:29,980 Porque he roto el stream 266 00:10:29,980 --> 00:10:32,840 Bueno, para que me quepa en la pantalla 267 00:10:32,840 --> 00:10:34,519 Pero si no, poner el multilínea 268 00:10:34,519 --> 00:10:36,659 Con los tres, lo que sea 269 00:10:36,659 --> 00:10:39,539 Where 270 00:10:39,539 --> 00:10:42,639 E.nombre 271 00:10:42,639 --> 00:10:46,250 Igual a 272 00:10:46,250 --> 00:10:47,470 Y aquí es donde 273 00:10:47,470 --> 00:10:49,029 Si fuera jdbc 274 00:10:49,029 --> 00:10:51,389 Se pondría la interrogación 275 00:10:51,389 --> 00:10:53,710 Pero aquí no se pone la interrogación 276 00:10:53,710 --> 00:10:55,750 aquí se pone dos puntos y el nombre que le doy 277 00:10:55,750 --> 00:10:58,029 a este parámetro que luego voy a inyectar 278 00:10:58,029 --> 00:10:59,789 llamémosle nombre el que sea 279 00:10:59,789 --> 00:11:01,289 vale 280 00:11:01,289 --> 00:11:02,350 entonces 281 00:11:02,350 --> 00:11:05,409 aquí que estoy haciendo mal 282 00:11:05,409 --> 00:11:06,809 ah bueno que estoy aquí está 283 00:11:06,809 --> 00:11:09,909 vale voy a dejar así para que no 284 00:11:09,909 --> 00:11:11,029 moleste 285 00:11:11,029 --> 00:11:13,710 vale bueno pues ahora 286 00:11:13,710 --> 00:11:15,129 tenemos que hacer una query 287 00:11:15,129 --> 00:11:20,620 una query que esta la sacamos 288 00:11:20,620 --> 00:11:21,120 de em 289 00:11:21,120 --> 00:11:24,779 a ver si veo que pierdo mucho tiempo 290 00:11:24,779 --> 00:11:25,940 no create query 291 00:11:25,940 --> 00:11:28,120 Lo miro en la chuleta y ya está 292 00:11:28,120 --> 00:11:29,220 Esto será 293 00:11:29,220 --> 00:11:31,360 Create 294 00:11:31,360 --> 00:11:33,159 Query 295 00:11:33,159 --> 00:11:34,279 Vale 296 00:11:34,279 --> 00:11:36,419 Y ahora aquí 297 00:11:36,419 --> 00:11:39,179 Le ponemos la query 298 00:11:39,179 --> 00:11:46,669 Import query de Jakarta 299 00:11:46,669 --> 00:11:48,169 Persistence, vale 300 00:11:48,169 --> 00:11:53,940 Y se llaman igual, vale 301 00:11:53,940 --> 00:11:54,919 String 302 00:11:54,919 --> 00:11:57,440 JPQL 303 00:11:57,440 --> 00:11:59,559 Lo vamos a llamar JPQL 304 00:11:59,559 --> 00:12:03,470 jpql 305 00:12:03,470 --> 00:12:05,870 vale, y ahora la query 306 00:12:05,870 --> 00:12:07,049 hay que fijarle el parámetro 307 00:12:07,049 --> 00:12:10,070 query.tendrá un set parameter 308 00:12:10,070 --> 00:12:10,909 vale 309 00:12:10,909 --> 00:12:13,830 el parámetro de posición 310 00:12:13,830 --> 00:12:15,570 que se llama nom 311 00:12:15,570 --> 00:12:17,629 perdón 312 00:12:17,629 --> 00:12:19,250 también se puede acceder por posición 313 00:12:19,250 --> 00:12:21,710 le vamos a dar 314 00:12:21,710 --> 00:12:23,690 el parámetro de aquí arriba del 315 00:12:23,690 --> 00:12:25,610 método que era nombre 316 00:12:25,610 --> 00:12:28,029 mi parámetro 317 00:12:28,029 --> 00:12:28,870 del método 318 00:12:28,870 --> 00:12:35,330 vale, y ahora 319 00:12:35,330 --> 00:12:37,470 a esta query que ya le he fijado el parámetro 320 00:12:37,470 --> 00:12:39,350 le puedo sacar ya 321 00:12:39,350 --> 00:12:41,029 el get result list 322 00:12:41,029 --> 00:12:43,669 y ya esto va aquí 323 00:12:43,669 --> 00:12:45,029 o sea, lo he hecho todo línea por línea 324 00:12:45,029 --> 00:12:46,629 esto sería en una línea normalmente 325 00:12:46,629 --> 00:12:54,899 vale, me dice que claro 326 00:12:54,899 --> 00:12:57,899 es un casting sin chequear 327 00:12:57,899 --> 00:12:59,779 sí, claro que es un casting 328 00:12:59,779 --> 00:13:01,200 sin chequear, pero así es la vida 329 00:13:01,200 --> 00:13:03,639 hay que confiar en que 330 00:13:03,639 --> 00:13:05,519 yo he hecho bien 331 00:13:05,519 --> 00:13:06,620 el jpql de arriba 332 00:13:06,620 --> 00:13:14,320 Bueno, pues esta es la idea de JPQL 333 00:13:14,320 --> 00:13:16,620 Parecido a SQL 334 00:13:16,620 --> 00:13:18,399 Es un mundo de detalles 335 00:13:18,399 --> 00:13:19,840 Y de historias al conocerlo 336 00:13:19,840 --> 00:13:21,059 No es nuestra intención 337 00:13:21,059 --> 00:13:23,740 Yo aquí estoy cogiendo el objeto entero 338 00:13:23,740 --> 00:13:25,399 Podría coger 339 00:13:25,399 --> 00:13:27,419 Solo propiedades sueltas 340 00:13:27,419 --> 00:13:30,000 Entonces no sería un list de empleados 341 00:13:30,000 --> 00:13:31,759 Sino un list de integer, de lo que fuera 342 00:13:31,759 --> 00:13:34,500 Vale, no tengo que coger siempre objetos enteros 343 00:13:34,500 --> 00:13:36,519 Puedo coger propiedades sueltas 344 00:13:36,519 --> 00:13:38,820 Vale, fijo tantos parámetros 345 00:13:38,820 --> 00:13:39,519 Como quiera 346 00:13:39,519 --> 00:13:41,759 puede hacer join, puede hacer de todo 347 00:13:41,759 --> 00:13:45,659 meterse en jpql ya sería 348 00:13:45,659 --> 00:13:47,159 otro tema para el que no tenemos 349 00:13:47,159 --> 00:13:48,399 tiempo 350 00:13:48,399 --> 00:13:51,779 ¿vale? entonces lo normal 351 00:13:51,779 --> 00:13:53,059 aquí es anidarlo todo 352 00:13:53,059 --> 00:13:55,679 pues desde empleados de arriba 353 00:13:55,679 --> 00:13:57,419 habríamos hecho el createquery 354 00:13:57,419 --> 00:13:59,360 setparameter de resundice 355 00:13:59,360 --> 00:14:01,919 lo normal es que lo hubiéramos todo 356 00:14:01,919 --> 00:14:03,539 metido en una única línea 357 00:14:03,539 --> 00:14:05,320 ¿vale? pero bueno 358 00:14:05,320 --> 00:14:07,779 a partir de aquí podría yo tirar con el 359 00:14:07,779 --> 00:14:09,679 create query, bla, bla, bla, bla, bla, y lo tengo 360 00:14:09,679 --> 00:14:11,759 todo en una línea. Pero así 361 00:14:11,759 --> 00:14:12,899 en principio se ve más claro. 362 00:14:14,000 --> 00:14:15,940 A ver, vamos a probarlo 363 00:14:15,940 --> 00:14:17,700 desde nuestro main. Ah, bueno, 364 00:14:17,779 --> 00:14:18,440 que no he hecho el return. 365 00:14:25,500 --> 00:14:29,269 Return empleados. 366 00:14:31,450 --> 00:14:31,850 Vale. 367 00:14:38,980 --> 00:14:40,320 ¿El alias no es en el front? 368 00:14:46,929 --> 00:14:47,769 Vamos a probarlo. 369 00:14:51,740 --> 00:14:53,200 En SQL es en el front. 370 00:14:53,960 --> 00:14:54,980 Pero aquí es que 371 00:14:54,980 --> 00:14:57,080 En el front me está sonando raro a la vista 372 00:14:57,080 --> 00:14:58,100 Vamos a probarlo 373 00:14:58,100 --> 00:14:59,440 Y si no lo cambiamos 374 00:14:59,440 --> 00:15:08,039 Vámonos al main 375 00:15:08,039 --> 00:15:15,230 En mi caso 376 00:15:15,230 --> 00:15:16,470 Yo voy a coger 377 00:15:16,470 --> 00:15:18,029 Ana barra baja 378 00:15:18,029 --> 00:15:27,610 Y ahora voy a mostrarlo todo 379 00:15:27,610 --> 00:15:29,450 Get empleados 380 00:15:29,450 --> 00:15:32,029 Esto voy a hacer 381 00:15:32,029 --> 00:15:35,120 Punto 382 00:15:35,120 --> 00:15:36,139 String 383 00:15:36,139 --> 00:15:38,179 Punto for each 384 00:15:38,179 --> 00:15:42,809 Que me los muestre 385 00:15:42,809 --> 00:16:08,190 Vale, entonces como no tengo un toString 386 00:16:08,190 --> 00:16:10,649 Empleado 387 00:16:10,649 --> 00:16:11,870 Me va a salir un poco feo 388 00:16:11,870 --> 00:16:13,769 Vamos a hacer un toString rápido 389 00:16:13,769 --> 00:16:20,549 Un toString rápido 390 00:16:20,549 --> 00:16:21,629 Sin el departamento 391 00:16:21,629 --> 00:16:23,750 Con id y nombre 392 00:16:23,750 --> 00:16:28,289 Vale, alguien llama por ahí 393 00:16:28,289 --> 00:16:30,110 Si 394 00:16:30,110 --> 00:16:33,450 Igualmente 395 00:16:33,450 --> 00:16:36,350 vale, vamos a ver si 396 00:16:36,350 --> 00:16:38,090 la jpql 397 00:16:38,090 --> 00:16:40,230 la hemos escrito bien, igual no está bien escrita 398 00:16:40,230 --> 00:16:42,289 en ese caso uno lo consulta 399 00:16:42,289 --> 00:16:43,870 y dice, ah, es que he puesto el de donde no es 400 00:16:43,870 --> 00:16:52,210 venga, vale 401 00:16:52,210 --> 00:16:56,159 interpret expression 402 00:16:56,159 --> 00:16:57,519 e.nombre, vale 403 00:16:57,519 --> 00:16:58,879 efectivamente el alias 404 00:16:58,879 --> 00:17:00,659 lo he puesto 405 00:17:00,659 --> 00:17:01,860 select 406 00:17:01,860 --> 00:17:05,700 es que 407 00:17:05,700 --> 00:17:07,960 hay otro lenguaje 408 00:17:07,960 --> 00:17:08,900 que es hql 409 00:17:08,900 --> 00:17:11,980 No, no me 410 00:17:11,980 --> 00:17:14,160 A ver, es que HQL es el propio 411 00:17:14,160 --> 00:17:15,440 De consulta de hibernate 412 00:17:15,440 --> 00:17:18,200 ¿Vale? Que se parece a JPQL 413 00:17:18,200 --> 00:17:20,240 Pero no, entonces a veces los mezclo los dos 414 00:17:20,240 --> 00:17:22,599 Y prefiero, en lugar de mirarlo 415 00:17:22,599 --> 00:17:24,480 Que lo hagamos como nos sale 416 00:17:24,480 --> 00:17:25,660 Porque si nos salen errores 417 00:17:25,660 --> 00:17:28,079 Eso hace que doblemente lo aprendamos 418 00:17:28,079 --> 00:17:29,519 Pues hemos tenido que trabajarlo dos veces 419 00:17:29,519 --> 00:17:31,940 Select 420 00:17:31,940 --> 00:17:35,589 A ver, si es así 421 00:17:35,589 --> 00:17:37,329 De empleado es 422 00:17:37,329 --> 00:17:38,930 Selecciona el objeto enterito 423 00:17:38,930 --> 00:17:41,450 Si no, podría yo seleccionar solamente el nombre 424 00:17:41,450 --> 00:17:41,970 El que fuera 425 00:17:41,970 --> 00:17:44,130 No, vamos a seleccionar el objeto enterito 426 00:17:44,130 --> 00:17:46,329 Para que sea un list de empleados 427 00:17:46,329 --> 00:17:48,349 Vamos a ver ahora 428 00:17:48,349 --> 00:17:51,470 ¿Tampoco? 429 00:17:53,130 --> 00:17:54,589 Ah, no, pues a mí no 430 00:17:54,589 --> 00:17:55,390 Entonces yo que he escrito mal 431 00:17:55,390 --> 00:17:58,930 Mis matches de input 432 00:17:58,930 --> 00:18:00,529 Expecting one of the following 433 00:18:00,529 --> 00:18:02,269 Que he escrito mal 434 00:18:02,269 --> 00:18:16,000 ah, vale, en mi caso era 435 00:18:16,000 --> 00:18:18,859 en mi caso era porque no había puesto aquí el espacio 436 00:18:18,859 --> 00:18:20,559 vale, entonces tenía 437 00:18:20,559 --> 00:18:21,720 el ewer todo seguido 438 00:18:21,720 --> 00:18:23,839 vale, pero ya sí que funciona así 439 00:18:23,839 --> 00:18:26,019 el alias efectivamente 440 00:18:26,019 --> 00:18:28,940 estaba mal puesto, menos mal que tengo un secretario 441 00:18:28,940 --> 00:18:30,680 muy cualificado 442 00:18:35,079 --> 00:18:36,019 ¿subir es ir para allá? 443 00:18:36,380 --> 00:18:36,980 ¿hasta dónde? 444 00:18:38,299 --> 00:18:39,099 arriba es el main 445 00:18:39,099 --> 00:18:46,140 es un poquito rara 446 00:18:46,140 --> 00:18:48,599 la sintaxis esta 447 00:18:48,599 --> 00:18:50,240 en SQL 448 00:18:50,240 --> 00:18:53,099 tú piensas en SQL 449 00:18:53,099 --> 00:18:54,180 pero 450 00:18:54,180 --> 00:18:56,240 navegando por tablas 451 00:18:56,240 --> 00:18:58,579 y propiedades, perdón, navegando por 452 00:18:58,579 --> 00:19:00,339 clases y propiedades de campos 453 00:19:00,339 --> 00:19:02,779 propiedades de clases en lugar de por tablas 454 00:19:02,779 --> 00:19:04,500 y campos, y ya está 455 00:19:04,500 --> 00:19:06,900 y luego el resto de la sintaxis 456 00:19:06,900 --> 00:19:08,660 para los join, para todo es igual 457 00:19:08,660 --> 00:19:10,380 lo único es 458 00:19:10,380 --> 00:19:12,839 esto, que jpql 459 00:19:12,839 --> 00:19:13,759 ¿por qué hql no? 460 00:19:13,799 --> 00:19:15,720 por eso siempre me lío, pero JPQL 461 00:19:15,720 --> 00:19:18,200 te obliga a poner 462 00:19:18,200 --> 00:19:19,960 un alias a la tabla 463 00:19:19,960 --> 00:19:22,279 en la que estás accediendo, en este caso la clase 464 00:19:22,279 --> 00:19:24,359 y luego ya con el alias 465 00:19:24,359 --> 00:19:26,980 ya aquí recoges de ella lo que quieras 466 00:19:26,980 --> 00:19:28,319 vale 467 00:19:28,319 --> 00:19:34,069 vale, pues esto en cuanto a JPQL 468 00:19:34,069 --> 00:19:37,829 bueno, vistazo muy por encima 469 00:19:37,829 --> 00:19:39,849 de JPA, pero más o menos 470 00:19:39,849 --> 00:19:41,329 la idea la tenemos de que va 471 00:19:41,329 --> 00:19:43,430 perdón 472 00:19:43,430 --> 00:19:45,170 ¿cómo? 473 00:19:45,630 --> 00:20:13,710 ¿Y si me lo está haciendo? Espérate. Sí, están aquí. Le he puesto en tu stream. Vale. Bueno, pues entonces, esto de JPA está muy bien, pero realmente lo hemos puesto en práctica en una estructura muy chapucera, ¿no? Con un main. 474 00:20:13,710 --> 00:20:15,970 Primer paso, vamos a darle 475 00:20:15,970 --> 00:20:18,829 Otro diseño 476 00:20:18,829 --> 00:20:20,529 Con DAOs y servicios 477 00:20:20,529 --> 00:20:21,390 ¿Vale? 478 00:20:21,869 --> 00:20:23,970 Eso nos permite ya entrar un poquito con 479 00:20:23,970 --> 00:20:26,230 Las transacciones 480 00:20:26,230 --> 00:20:29,329 Vale, pues vamos a darle otro diseño 481 00:20:29,329 --> 00:20:33,380 Entonces este main no nos molesta 482 00:20:33,380 --> 00:20:37,480 Se queda aquí como mi main de pruebas 483 00:20:37,480 --> 00:20:38,839 No lo vamos a borrar 484 00:20:38,839 --> 00:20:40,200 Tengo las entidades 485 00:20:40,200 --> 00:20:43,819 ¿Vale? ¿Qué es lo siguiente que hacemos cuando hacemos este patrón? 486 00:20:43,920 --> 00:20:44,619 Pues los DAOs 487 00:20:44,619 --> 00:20:56,069 Que el XML se ponga mal 488 00:20:56,069 --> 00:20:56,869 Como el Pong 489 00:20:56,869 --> 00:20:57,910 El del Persistent 490 00:20:57,910 --> 00:20:59,809 Y a mí es que ese no se me ha puesto mal nunca 491 00:20:59,809 --> 00:21:02,150 No sé por qué se os pone mal 492 00:21:02,150 --> 00:21:05,890 Y sí, ¿no? 493 00:21:05,950 --> 00:21:07,369 Es que si a mí se pusiera rojo 494 00:21:07,369 --> 00:21:09,670 Vamos, removería cielo y tierra hasta que se quita el rojo 495 00:21:09,670 --> 00:21:11,410 Pero es que nunca me ha pasado 496 00:21:11,410 --> 00:21:12,210 Entonces no tengo ni idea 497 00:21:12,210 --> 00:21:13,269 No sé deciros 498 00:21:13,269 --> 00:21:20,190 Es decir, os da un error 499 00:21:20,190 --> 00:21:20,750 Por 500 00:21:20,750 --> 00:21:23,890 Si ponéis una S se quita 501 00:21:23,890 --> 00:21:25,369 aquí 502 00:21:25,369 --> 00:21:28,690 y si ponéis una S y quitáis este atributo 503 00:21:28,690 --> 00:21:30,089 ¿lo habéis probado? 504 00:21:31,509 --> 00:21:32,970 porque el error se quitaría 505 00:21:32,970 --> 00:21:34,769 y puede que os funcionara 506 00:21:34,769 --> 00:21:36,390 el 507 00:21:36,390 --> 00:21:41,299 pero vamos, eso habrá que averiguarlo 508 00:21:41,299 --> 00:21:42,220 porque es un rollo 509 00:21:42,220 --> 00:21:43,640 que eso esté así 510 00:21:43,640 --> 00:21:45,880 claro, pero cuando tú pones aquí una S 511 00:21:45,880 --> 00:21:48,180 lo que os está diciendo, por lo que he visto 512 00:21:48,180 --> 00:21:49,880 es que el esquema Location 513 00:21:49,880 --> 00:21:52,059 se ha quitado y no da error 514 00:21:52,059 --> 00:21:53,819 es que eso lo intuía 515 00:21:53,819 --> 00:21:55,700 bueno, pues 516 00:21:55,700 --> 00:21:57,819 a ver, mientras funcione 517 00:21:57,819 --> 00:21:58,480 lo dejamos así 518 00:21:58,480 --> 00:22:01,200 claro 519 00:22:01,200 --> 00:22:03,559 vale 520 00:22:03,559 --> 00:22:05,160 vamos a ver, entonces 521 00:22:05,160 --> 00:22:09,900 vamos al DAO 522 00:22:09,900 --> 00:22:11,500 y ahora sí que 523 00:22:11,500 --> 00:22:13,880 venga, vamos a jugar 524 00:22:13,880 --> 00:22:14,440 ¿vale? 525 00:22:15,359 --> 00:22:16,660 porque os gusta jugar 526 00:22:16,660 --> 00:22:18,720 bueno, ¿lo vas a hacer un cajón? 527 00:22:19,039 --> 00:22:21,339 no, no lo voy a hacer un cajón 528 00:22:21,339 --> 00:22:23,299 vamos a jugar con el cerebro 529 00:22:23,299 --> 00:22:25,539 vamos a jugar moviendo las neuronas 530 00:22:25,539 --> 00:22:27,599 que nos encantan, entonces 531 00:22:27,599 --> 00:22:30,220 vamos a pensar, imaginaos que tenemos que hacer 532 00:22:30,220 --> 00:22:32,220 un CRUD básico 533 00:22:32,220 --> 00:22:35,140 vamos a reactivarlas 534 00:22:35,140 --> 00:22:38,220 que si no luego nos llega muy rápido el deterioro 535 00:22:38,220 --> 00:22:38,799 cognitivo 536 00:22:38,799 --> 00:22:42,079 vamos a hacer, imaginaos que lo que 537 00:22:42,079 --> 00:22:44,099 tenemos que hacer con departamento y empleado es un CRUD 538 00:22:44,099 --> 00:22:46,059 básico, create 539 00:22:46,059 --> 00:22:48,460 departamento, delete departamento 540 00:22:48,460 --> 00:22:50,000 create empleado, delete 541 00:22:50,000 --> 00:22:51,599 empleado, pues 542 00:22:51,599 --> 00:22:53,759 ¿para qué vamos a duplicar? 543 00:22:53,759 --> 00:22:56,279 empleado DAO, departamento DAO 544 00:22:56,279 --> 00:22:58,660 vamos a hacernos un DAO genérico 545 00:22:58,660 --> 00:22:59,859 con el tipo genérico 546 00:22:59,859 --> 00:23:01,880 vale 547 00:23:01,880 --> 00:23:03,960 y así 548 00:23:03,960 --> 00:23:05,099 pues 549 00:23:05,099 --> 00:23:08,079 refrescamos ciertas ideas 550 00:23:08,079 --> 00:23:10,180 y nos abrimos a ciertos 551 00:23:10,180 --> 00:23:12,799 diseños, vamos a hacernos un 552 00:23:12,799 --> 00:23:14,640 DAO 553 00:23:14,640 --> 00:23:16,240 general, genérico 554 00:23:16,240 --> 00:23:20,720 para todos 555 00:23:20,720 --> 00:23:25,309 este que me valga para todos 556 00:23:25,309 --> 00:23:28,049 interfaz, perdón 557 00:23:28,049 --> 00:23:29,329 Que estoy en las interfaces 558 00:23:29,329 --> 00:23:34,779 Este es el interfaz, todavía no es la implementación 559 00:23:34,779 --> 00:23:36,160 Vale, pues a ver 560 00:23:36,160 --> 00:23:37,019 ¿Qué es lo que quiero hacer? 561 00:23:37,319 --> 00:23:39,779 Yo quiero hacer un create 562 00:23:39,779 --> 00:23:41,799 Lo que sea 563 00:23:41,799 --> 00:23:43,420 Departamento empleado, un create 564 00:23:43,420 --> 00:23:45,180 ¿Y aquí qué le pasaré? 565 00:23:46,119 --> 00:23:48,680 Departamento o empleado, no sé lo que le pasaré 566 00:23:48,680 --> 00:23:50,339 Con lo cual le paso el tipo genérico 567 00:23:50,339 --> 00:23:51,420 ¿Vale? 568 00:23:55,069 --> 00:23:56,950 Objeto, object, como lo queramos llamar 569 00:23:56,950 --> 00:24:02,940 ¿Y ahora qué ocurre? 570 00:24:02,940 --> 00:24:04,500 Que mi clase la he convertido 571 00:24:04,500 --> 00:24:06,599 A mi interfaz automáticamente 572 00:24:06,599 --> 00:24:09,559 La he convertido en genérica 573 00:24:09,559 --> 00:24:10,680 ¿Vale? 574 00:24:13,839 --> 00:24:14,720 ¿Qué me dice esto? 575 00:24:21,059 --> 00:24:21,619 Perdón 576 00:24:21,619 --> 00:24:23,039 Estoy poniendo esto donde no es 577 00:24:23,039 --> 00:24:25,680 Vale 578 00:24:25,680 --> 00:24:30,900 El nombrecito que he elegido 579 00:24:30,900 --> 00:24:32,740 Creo que está muy mal 580 00:24:32,740 --> 00:24:35,259 Entidad, lo que sea, objeto 581 00:24:35,259 --> 00:24:37,519 No, pero no es por eso 582 00:24:37,519 --> 00:24:38,779 ¿Por qué me...? 583 00:24:38,779 --> 00:24:39,720 ¿Qué llaves? 584 00:24:41,960 --> 00:24:43,460 ¿Pero dónde he puesto un punto y coma? 585 00:24:43,880 --> 00:24:44,240 ¡Ah! 586 00:24:45,400 --> 00:24:47,000 ¡Ah, que sí, que sí, jolines! 587 00:24:47,160 --> 00:24:49,759 Vale, vale, vale 588 00:24:49,759 --> 00:24:52,039 Puedo poner object porque la mayúscula no le molesta 589 00:24:52,039 --> 00:24:52,700 O sea, no 590 00:24:52,700 --> 00:24:55,339 Podría poner object, vale, vale 591 00:24:55,339 --> 00:24:56,700 Vale 592 00:24:56,700 --> 00:24:59,220 Queremos crear lo que sea 593 00:24:59,220 --> 00:25:00,380 ¿Qué más queremos? 594 00:25:01,000 --> 00:25:02,940 Queremos recuperar 595 00:25:02,940 --> 00:25:05,859 Por clave primaria 596 00:25:05,859 --> 00:25:07,220 Pero aquí la hemos liado 597 00:25:07,220 --> 00:25:09,799 La clave primaria coincide en este caso 598 00:25:09,799 --> 00:25:12,119 Que se entera para ambas, tanto departamento como id 599 00:25:12,119 --> 00:25:13,900 Pero podría no serlo 600 00:25:13,900 --> 00:25:15,980 Entonces, este es un nuevo tipo genérico 601 00:25:15,980 --> 00:25:21,730 con lo cual este es doblemente 602 00:25:21,730 --> 00:25:22,470 genérico 603 00:25:22,470 --> 00:25:27,109 no, no, no, cómo te vas a perder 604 00:25:27,109 --> 00:25:30,809 cuál es el CRUD básico 605 00:25:30,809 --> 00:25:33,589 insertar, recuperar, eliminar y actualizar 606 00:25:33,589 --> 00:25:35,150 pues eliminar 607 00:25:35,150 --> 00:25:36,789 estoy poniendo void todo el rato 608 00:25:36,789 --> 00:25:38,769 siempre es más bonito un boolean 609 00:25:38,769 --> 00:25:41,170 o algo que te permita validar 610 00:25:41,170 --> 00:25:43,009 si está bien o el número 611 00:25:43,009 --> 00:25:45,230 de registros creados, en este caso uno 612 00:25:45,230 --> 00:25:46,970 pero bueno, estoy poniendo un void 613 00:25:46,970 --> 00:25:47,730 por comodidad 614 00:25:47,730 --> 00:25:49,589 vale, aquí sería 615 00:25:49,589 --> 00:25:51,210 REMUD 616 00:25:51,210 --> 00:25:52,509 que, pues el objeto 617 00:25:52,509 --> 00:25:57,400 y ahora UDATE 618 00:25:57,400 --> 00:26:01,440 UDATE 619 00:26:01,440 --> 00:26:09,880 vale, pues este es el 620 00:26:09,880 --> 00:26:11,819 CRUD básico, y es que 621 00:26:11,819 --> 00:26:13,880 va a ser el mismo para departamento, para 622 00:26:13,880 --> 00:26:15,500 empleado, para Pepito Pérez 623 00:26:15,500 --> 00:26:17,859 para cualquiera, va a ser el mismo 624 00:26:17,859 --> 00:26:19,619 entonces hagamos lo genérico 625 00:26:19,619 --> 00:26:21,980 y ya está, genérico depende de dos 626 00:26:21,980 --> 00:26:23,819 cosas, de la clave que 627 00:26:23,819 --> 00:26:25,380 necesitamos para el GET 628 00:26:25,380 --> 00:26:27,319 y del propio tipo de dato 629 00:26:27,319 --> 00:26:42,660 Vale, pues 630 00:26:42,660 --> 00:26:44,240 Ahora 631 00:26:44,240 --> 00:26:46,579 Vamos a hacer la implementación de esto 632 00:26:46,579 --> 00:27:05,480 Normalmente sí 633 00:27:05,480 --> 00:27:08,000 Normalmente sí 634 00:27:08,000 --> 00:27:17,230 Vale, pues esta, yo que sé 635 00:27:17,230 --> 00:27:18,730 Implementación da 636 00:27:18,730 --> 00:27:28,920 Y esta que implementa 637 00:27:28,920 --> 00:27:30,220 Implements 638 00:27:30,220 --> 00:27:31,880 Que implementa, pues 639 00:27:31,880 --> 00:27:34,619 esta otra, generic 640 00:27:34,619 --> 00:27:36,599 dao, vale 641 00:27:36,599 --> 00:27:40,460 generic dao de 642 00:27:40,460 --> 00:27:42,220 t, k 643 00:27:42,220 --> 00:27:44,079 vale 644 00:27:44,079 --> 00:27:46,740 t, ah sí 645 00:27:46,740 --> 00:27:48,259 k, me he confundido de clave 646 00:27:48,259 --> 00:27:49,539 vale 647 00:27:49,539 --> 00:27:54,569 dao 648 00:27:54,569 --> 00:27:57,829 t, v, y ahora 649 00:27:57,829 --> 00:28:02,819 vale, entonces 650 00:28:02,819 --> 00:28:04,759 tenemos que implementar estos métodos 651 00:28:04,759 --> 00:28:06,240 vale 652 00:28:06,240 --> 00:28:08,880 entonces, estos 653 00:28:08,880 --> 00:28:09,640 métodos 654 00:28:09,640 --> 00:28:12,279 siguen dependiendo 655 00:28:12,279 --> 00:28:14,619 yo haré el persist de este objeto 656 00:28:14,619 --> 00:28:15,440 haré lo que sea 657 00:28:15,440 --> 00:28:18,240 esta clase sigue dependiendo de t y v 658 00:28:18,240 --> 00:28:20,660 con lo cual esto sigue siendo 659 00:28:20,660 --> 00:28:21,500 genérico así 660 00:28:21,500 --> 00:28:26,900 uy jolín con la k 661 00:28:26,900 --> 00:28:27,720 esa vez 662 00:28:27,720 --> 00:28:28,660 vale 663 00:28:28,660 --> 00:28:52,720 no 664 00:28:52,720 --> 00:28:55,880 a ver los paquetes no van unos dentro de otros 665 00:28:55,880 --> 00:28:57,440 la carpeta si 666 00:28:57,440 --> 00:28:58,400 como he puesto un punto 667 00:28:58,400 --> 00:29:01,279 la carpeta físicamente estará ubicada 668 00:29:01,279 --> 00:29:03,640 pero los paquetes están siempre 669 00:29:03,640 --> 00:29:05,059 desde la raíz 670 00:29:05,059 --> 00:29:17,829 vale, pues entonces, aquí 671 00:29:17,829 --> 00:29:25,930 crear, pues aquí voy a 672 00:29:25,930 --> 00:29:27,309 copiar todo esto de aquí 673 00:29:27,309 --> 00:29:42,180 a ver 674 00:29:42,180 --> 00:29:45,299 es que esto no es una conexión 675 00:29:45,299 --> 00:29:46,880 en realidad, se puede 676 00:29:46,880 --> 00:29:49,140 en una aplicación pequeña, controlada 677 00:29:49,140 --> 00:29:51,019 tú puedes hacer un entity manager que está 678 00:29:51,019 --> 00:29:53,059 ahí vivo todo el rato, pero es que 679 00:29:53,059 --> 00:29:54,339 esto no es solo una conexión 680 00:29:54,339 --> 00:29:57,200 o sea, esto es todo un contexto con objetos 681 00:29:57,200 --> 00:29:58,599 manejados, marcados 682 00:29:58,599 --> 00:30:00,559 entonces si tú haces uno único 683 00:30:00,559 --> 00:30:03,079 en una aplicación grande puede haber 684 00:30:03,079 --> 00:30:04,400 muchos efectos secundarios 685 00:30:04,400 --> 00:30:06,660 de mezcla de objetos 686 00:30:06,660 --> 00:30:09,339 de que unos objetos tengan efectos 687 00:30:09,339 --> 00:30:11,039 no deseados de otros 688 00:30:11,039 --> 00:30:13,220 entonces no es lo recomendable 689 00:30:13,220 --> 00:30:14,960 lo recomendable es que en el contexto 690 00:30:14,960 --> 00:30:16,920 en el que tú vas a hacer algo, ahí te hagas tu contexto 691 00:30:16,920 --> 00:30:18,440 de presidencia y ya está, pero bueno 692 00:30:18,440 --> 00:30:20,500 también depende, depende de la situación 693 00:30:20,500 --> 00:30:21,940 pero 694 00:30:21,940 --> 00:30:25,140 lo que la respuesta 695 00:30:25,140 --> 00:30:27,339 de fondo sería, es que esto no es solo una conexión 696 00:30:27,339 --> 00:30:29,099 esto es una conexión más 697 00:30:29,099 --> 00:30:31,400 un montón de información, de objetos, de cosas 698 00:30:31,400 --> 00:30:33,099 entonces hacerla grande y que 699 00:30:33,099 --> 00:30:35,019 entre ahí todo, puede ser peligroso 700 00:30:35,019 --> 00:30:37,119 tan pequeña como para el método 701 00:30:37,119 --> 00:30:38,819 de DAO, pues a lo mejor no es necesario 702 00:30:38,819 --> 00:30:41,119 a nivel de servicio, vale 703 00:30:41,119 --> 00:30:42,079 pues quizá un poco más 704 00:30:42,079 --> 00:30:45,220 se puede jugar con eso también 705 00:30:45,220 --> 00:30:46,299 dependiendo de la aplicación 706 00:30:46,299 --> 00:30:48,579 entonces, aquí 707 00:30:48,579 --> 00:31:12,160 vale 708 00:31:12,160 --> 00:31:13,960 entonces, el create 709 00:31:13,960 --> 00:31:16,059 sería esto, ya está 710 00:31:16,059 --> 00:31:18,059 el recuperar 711 00:31:18,059 --> 00:31:21,400 este ya no es tan sencillo 712 00:31:21,400 --> 00:31:23,279 el recuperar 713 00:31:23,279 --> 00:31:24,599 este tendríamos que hacer 714 00:31:24,599 --> 00:31:25,680 pues esto mismo de aquí 715 00:31:25,680 --> 00:31:39,210 bueno, a ver, perdonadme, la transacción no la he puesto aquí 716 00:31:39,210 --> 00:31:43,150 que transacción 717 00:31:43,150 --> 00:31:44,529 siempre me olvido de esta 718 00:31:44,529 --> 00:31:56,730 entonces 719 00:31:56,730 --> 00:32:00,410 si podríamos haberle 720 00:32:00,410 --> 00:32:02,309 inyectado por constructor este 721 00:32:02,309 --> 00:32:04,470 y haberlo pasado 722 00:32:04,470 --> 00:32:06,069 a nivel de servicio 723 00:32:06,069 --> 00:32:08,490 del entity manager que fuera uno por servicio 724 00:32:08,490 --> 00:32:10,309 y no uno por método 725 00:32:10,309 --> 00:32:12,269 atómico, pero bueno, son cosas que se pueden 726 00:32:12,269 --> 00:32:14,250 son cosas que se pueden ir 727 00:32:14,250 --> 00:32:16,450 diferentes posibilidades 728 00:32:16,450 --> 00:32:18,170 vale, a ver, entonces este 729 00:32:18,170 --> 00:32:20,190 tiene ahora ya, aquí no sería necesaria una 730 00:32:20,190 --> 00:32:22,490 transacción, aquí no es necesaria 731 00:32:22,490 --> 00:32:24,049 aunque bueno, la podamos poner 732 00:32:24,049 --> 00:32:26,250 porque esto es recuperar, entonces aquí 733 00:32:26,250 --> 00:32:27,609 uno haría el find 734 00:32:27,609 --> 00:32:29,849 y como es el find 735 00:32:29,849 --> 00:32:32,069 para recuperar por clave, que me devolvería 736 00:32:32,069 --> 00:32:34,049 el objeto, este de aquí, verdad 737 00:32:34,049 --> 00:32:37,809 t object 738 00:32:37,809 --> 00:32:40,829 igual a n.find 739 00:32:40,829 --> 00:32:43,250 y aquí yo devolvería el object 740 00:32:43,250 --> 00:32:47,200 pero aquí tengo un problema 741 00:32:47,200 --> 00:32:49,240 y es que 742 00:32:49,240 --> 00:32:52,640 no sé la clase 743 00:32:52,640 --> 00:32:54,500 ojalá 744 00:32:54,500 --> 00:32:56,299 ojalá me dejaran poner esto 745 00:32:56,299 --> 00:32:58,460 pero esto no lo puedo poner 746 00:32:58,460 --> 00:33:00,759 esto no me dejan ponerlo 747 00:33:00,759 --> 00:33:02,480 entonces 748 00:33:02,480 --> 00:33:05,599 se la tengo que pasar 749 00:33:05,599 --> 00:33:07,519 por parámetro 750 00:33:07,519 --> 00:33:08,839 al dado, este de aquí 751 00:33:08,839 --> 00:33:11,579 a ver, ¿qué es? cuando nosotros hablamos 752 00:33:11,579 --> 00:33:13,039 en general, por si 753 00:33:13,039 --> 00:33:15,599 ay Dios mío, tantos 754 00:33:15,599 --> 00:33:16,039 papeles 755 00:33:16,039 --> 00:33:19,980 aquí, pero esto no salió 756 00:33:19,980 --> 00:33:21,259 vale, a ver 757 00:33:21,259 --> 00:33:23,680 cuando nosotros, ¿qué es esto del punto 758 00:33:23,680 --> 00:33:25,480 class? vamos a recordarlo 759 00:33:25,480 --> 00:33:27,400 o verlo por si en ningún momento ha salido 760 00:33:27,400 --> 00:33:29,339 ni lo sabemos, a veces hablamos 761 00:33:29,339 --> 00:33:30,539 alegremente, pues eso 762 00:33:30,539 --> 00:33:35,299 y hacemos, empleado.class 763 00:33:35,299 --> 00:33:47,480 ¿Por qué? Porque nos lo han pedido, porque lo necesita algún método. Muchas veces, por ejemplo, este lo necesitaba y hay otros métodos que necesitan que le pasemos esto. 764 00:33:48,700 --> 00:34:05,119 ¿Esto realmente qué es? Esto realmente es un objeto. Eso es empleado.class o departamento.class o alumno.class. Esto es un objeto, como todos los objetos de Java, un objeto en memoria, un objeto instanciado y creado en memoria. 765 00:34:05,299 --> 00:34:07,299 por eso lo pasamos por parámetros 766 00:34:07,299 --> 00:34:09,119 porque eso es lo que se pasa por parámetros 767 00:34:09,119 --> 00:34:11,000 objetos de memoria, datos de memoria 768 00:34:11,000 --> 00:34:13,280 es un objeto, y la pregunta sería 769 00:34:13,280 --> 00:34:15,039 ¿y qué tiene dentro ese objeto? 770 00:34:15,739 --> 00:34:17,699 ¿qué tiene el objeto empleado.class? 771 00:34:18,360 --> 00:34:19,320 tiene información 772 00:34:19,320 --> 00:34:21,380 sobre de qué va 773 00:34:21,380 --> 00:34:23,619 esta clase, como su nombre 774 00:34:23,619 --> 00:34:25,599 número de propiedades que tiene, cosas así 775 00:34:25,599 --> 00:34:26,079 muy random 776 00:34:26,079 --> 00:34:29,280 eso es lo que tiene ese objeto 777 00:34:29,280 --> 00:34:31,679 información sobre esa clase 778 00:34:31,679 --> 00:34:33,699 entonces, hay métodos 779 00:34:33,699 --> 00:34:35,480 que la necesitan. El find 780 00:34:35,480 --> 00:34:37,440 la necesita para 781 00:34:37,440 --> 00:34:39,159 saber de qué va esta clase 782 00:34:39,159 --> 00:34:40,960 para alojar en ella 783 00:34:40,960 --> 00:34:42,800 los resultados del select. 784 00:34:43,760 --> 00:34:45,599 Y muchos otros métodos la necesitan. 785 00:34:47,099 --> 00:34:47,519 Vale, pues 786 00:34:47,519 --> 00:34:49,400 entonces, siguiente pregunta. Si esto es un 787 00:34:49,400 --> 00:34:51,559 objeto, todos los 788 00:34:51,559 --> 00:34:53,400 objetos son de una clase, 789 00:34:54,579 --> 00:34:55,280 ¿a qué clase 790 00:34:55,280 --> 00:34:56,380 pertenece este objeto? 791 00:34:57,800 --> 00:35:02,329 Pues a... 792 00:35:03,750 --> 00:35:06,369 ¡Qué graciositos! Os quería yo ver aquí 793 00:35:06,369 --> 00:35:08,610 con la pizarra 794 00:35:08,610 --> 00:35:10,820 vale 795 00:35:10,820 --> 00:35:15,179 pues a este 796 00:35:15,179 --> 00:35:23,170 ¿qué es esto? 797 00:35:23,670 --> 00:35:24,829 calma, relájate 798 00:35:24,829 --> 00:35:27,670 esto es una clase 799 00:35:27,670 --> 00:35:29,530 esto es una clase 800 00:35:29,530 --> 00:35:32,489 y los objetos 801 00:35:32,489 --> 00:35:34,150 que se instancian 802 00:35:34,150 --> 00:35:35,429 de esta clase, ¿cuáles son? 803 00:35:35,730 --> 00:35:37,769 estos, este es el objeto 804 00:35:37,769 --> 00:35:40,170 que se instancia de esta clase 805 00:35:40,170 --> 00:35:41,349 luego yo puedo hacer 806 00:35:41,349 --> 00:35:43,849 clase, imaginaos que tengo alumno 807 00:35:43,849 --> 00:35:48,260 c igual a 808 00:35:48,260 --> 00:35:51,840 alumno.class 809 00:35:51,840 --> 00:35:53,219 ¿vale? 810 00:35:53,460 --> 00:35:55,380 esta asignación es perfectamente válida 811 00:35:55,380 --> 00:35:57,500 el objeto alumno.class 812 00:35:57,500 --> 00:35:59,500 que es el objeto que tiene la información 813 00:35:59,500 --> 00:36:00,400 de la clase alumno 814 00:36:00,400 --> 00:36:02,820 se lo asigno a un objeto 815 00:36:02,820 --> 00:36:04,900 de esta clase 816 00:36:04,900 --> 00:36:07,239 porque esto ya es una clase, esto no es un objeto 817 00:36:07,239 --> 00:36:09,219 ¿vale? clase alumno 818 00:36:09,219 --> 00:36:11,300 vale, pues aquí podemos 819 00:36:11,300 --> 00:36:13,519 aprovecharnos de esto porque, oye, yo necesito 820 00:36:13,519 --> 00:36:15,659 un objeto de qué clase 821 00:36:15,659 --> 00:36:18,079 de la clase, clase T. 822 00:36:18,760 --> 00:36:19,960 Esto sí lo puedo poner. 823 00:36:20,360 --> 00:36:21,400 Esto sí me deja jambo. 824 00:36:22,000 --> 00:36:23,280 Pues voy a pasárselo, 825 00:36:24,280 --> 00:36:25,780 voy a inyectárselo por constructor 826 00:36:25,780 --> 00:36:27,760 y luego se lo doy aquí. 827 00:36:28,900 --> 00:36:29,860 Es decir, ¿cómo hago 828 00:36:29,860 --> 00:36:30,780 este arreglo de aquí? 829 00:36:31,639 --> 00:36:32,699 Ese problemón de ahí. 830 00:36:33,539 --> 00:36:34,440 Pues, dime. 831 00:36:34,440 --> 00:36:36,639 ¿Y alumno.class se puede guardar 832 00:36:36,639 --> 00:36:38,659 en vez de class de alumno? 833 00:36:38,739 --> 00:36:40,300 ¿Se puede guardar directamente en alumno? 834 00:36:41,079 --> 00:36:42,559 No, no, no, porque no es un objeto 835 00:36:42,559 --> 00:36:44,639 alumno. En alumno se lo puedes 836 00:36:44,639 --> 00:36:49,840 guardar objetos alumnos y los objetos alumnos pertenecen a la clase alumno y no pertenecen 837 00:36:49,840 --> 00:36:55,599 a la clase alumno. Eso es otro tipo de objetos, son otro tipo de objetos. Una cosa es el objeto 838 00:36:55,599 --> 00:37:01,039 que guarda información sobre la clase y otra cosa es el objeto que guarda un ejemplo concreto 839 00:37:01,039 --> 00:37:07,739 de esa clase, un alumno en concreto. Vale, pues aquí lo que queremos es pasarle a este, 840 00:37:07,739 --> 00:37:09,400 le queremos pasar 841 00:37:09,400 --> 00:37:11,519 un 842 00:37:11,519 --> 00:37:13,099 esto de aquí 843 00:37:13,099 --> 00:37:18,300 le queremos pasar este objeto 844 00:37:18,300 --> 00:37:24,340 yo que sé, tipo, como lo queráis llamar 845 00:37:24,340 --> 00:37:26,139 esto le queremos 846 00:37:26,139 --> 00:37:26,519 pasar 847 00:37:26,519 --> 00:37:29,480 vamos a pasárselo por constructor 848 00:37:29,480 --> 00:37:30,780 cuando lo llamemos 849 00:37:30,780 --> 00:37:34,119 cuando instanciemos esto 850 00:37:34,119 --> 00:37:36,920 vale, pues a ver 851 00:37:36,920 --> 00:37:39,300 aquí haremos nuestro constructor 852 00:37:39,300 --> 00:37:41,739 de esta de aquí 853 00:37:41,739 --> 00:37:55,190 Y el constructor 854 00:37:55,190 --> 00:37:57,230 No tenía los genéricos, ¿no? 855 00:37:57,269 --> 00:37:58,130 Creo que ahora se los quito 856 00:37:58,130 --> 00:38:01,250 Le pasamos aquí un class de t 857 00:38:01,250 --> 00:38:03,130 Ahora se los quito 858 00:38:03,130 --> 00:38:10,409 Dis 859 00:38:10,409 --> 00:38:12,869 Punto tipo 860 00:38:12,869 --> 00:38:14,530 Igual a tipo 861 00:38:14,530 --> 00:38:16,530 Vale 862 00:38:16,530 --> 00:38:19,050 Y esto de aquí me sobra 863 00:38:19,050 --> 00:38:19,849 ¿Verdad? 864 00:38:22,969 --> 00:38:23,690 ¡Hala! Ya está 865 00:38:23,690 --> 00:38:25,630 Entonces cuando yo instancia este 866 00:38:25,630 --> 00:38:28,510 Lo instanciaré como departamento íntegre 867 00:38:28,510 --> 00:38:31,150 o empleado íntegre, ¿vale? 868 00:38:31,409 --> 00:38:32,250 Así lo instanciaré. 869 00:38:32,630 --> 00:38:35,949 Y lo instanciaré pasándole al constructor departamento.class 870 00:38:35,949 --> 00:38:37,050 o empleado.class. 871 00:38:37,769 --> 00:38:38,309 Y ya está. 872 00:38:38,489 --> 00:38:39,289 Ahora lo instanciamos. 873 00:38:39,849 --> 00:38:41,510 Con lo cual ya he solucionado el problema de abajo. 874 00:38:42,150 --> 00:38:44,710 Ahora ya aquí le pongo tipo. 875 00:38:47,579 --> 00:38:48,579 Y tan a gusto. 876 00:38:49,840 --> 00:38:50,159 Qué guay. 877 00:38:52,559 --> 00:38:52,780 ¿Vale? 878 00:38:55,389 --> 00:38:57,530 Vale, ya tenemos el punto class que sea, 879 00:38:57,670 --> 00:38:58,949 que lo hemos cogido de aquí, 880 00:38:59,349 --> 00:39:02,170 porque se lo vamos a pasar a este cuando lo inyectemos. 881 00:39:02,170 --> 00:39:05,090 aquí quizá, efectivamente como decías tú 882 00:39:05,090 --> 00:39:07,250 también habría sido casi mejor 883 00:39:07,250 --> 00:39:08,230 pasarle 884 00:39:08,230 --> 00:39:10,969 el manager 885 00:39:10,969 --> 00:39:13,170 pasarle un manager 886 00:39:13,170 --> 00:39:15,170 y tirar de él y no estarlo aquí creando 887 00:39:15,170 --> 00:39:17,349 todo el rato, y que luego el que lo cree 888 00:39:17,349 --> 00:39:19,070 sea el servicio, el método de servicio 889 00:39:19,070 --> 00:39:21,349 que lo cree, que no sea uno global de aplicación 890 00:39:21,349 --> 00:39:22,730 sino uno por caso de uso 891 00:39:22,730 --> 00:39:25,070 eso quizá es menos 892 00:39:25,070 --> 00:39:25,809 pesado que 893 00:39:25,809 --> 00:39:28,909 y no solo eso 894 00:39:28,909 --> 00:39:30,710 sino que tendríamos el problema de que aquí 895 00:39:30,710 --> 00:39:33,230 como cerramos la sesión cada vez 896 00:39:33,230 --> 00:39:34,710 cuando yo haga un get 897 00:39:34,710 --> 00:39:37,190 si lo tengo como lazy 898 00:39:37,190 --> 00:39:39,630 aquí habré cerrado la sesión 899 00:39:39,630 --> 00:39:41,329 entonces después de hacer el get 900 00:39:41,329 --> 00:39:42,909 como quiera desde el servicio 901 00:39:42,909 --> 00:39:45,190 sacar los que cuelgan, no los voy a poder sacar 902 00:39:45,190 --> 00:39:46,909 entonces 903 00:39:46,909 --> 00:39:49,030 esto de, estoy pensando yo 904 00:39:49,030 --> 00:39:50,710 que poner aquí el entity manager aquí 905 00:39:50,710 --> 00:39:53,469 nos puede 906 00:39:53,469 --> 00:39:54,469 complicar la vida 907 00:39:54,469 --> 00:39:56,949 si queremos tirar 908 00:39:56,949 --> 00:39:58,889 de los objetos que cuelgan 909 00:39:58,889 --> 00:40:00,329 de este 910 00:40:00,329 --> 00:40:02,670 teniéndolo como lazy 911 00:40:02,670 --> 00:40:04,409 entonces vamos a hacer una cosa más 912 00:40:04,409 --> 00:40:06,389 bonita que es pasárselo por aquí 913 00:40:06,389 --> 00:40:08,769 entonces vamos a pasarle el entity manager 914 00:40:08,769 --> 00:40:10,869 por aquí, por constructor 915 00:40:10,869 --> 00:40:16,170 y al pasárselo por 916 00:40:16,170 --> 00:40:18,150 constructor todo esto se va 917 00:40:18,150 --> 00:40:19,510 a la basura 918 00:40:19,510 --> 00:40:22,309 esto perdón se va a la basura 919 00:40:22,309 --> 00:40:23,289 y el close también 920 00:40:23,289 --> 00:40:24,710 porque si 921 00:40:24,710 --> 00:40:29,159 y aquí tengo que poner lógicamente 922 00:40:29,159 --> 00:40:36,909 la propiedad 923 00:40:36,909 --> 00:40:37,670 y aquí 924 00:40:37,670 --> 00:40:41,030 Dis.en 925 00:40:41,030 --> 00:40:42,230 Igual a en 926 00:40:42,230 --> 00:40:43,969 Así mejor 927 00:40:43,969 --> 00:40:45,869 Se lo paso por constructor 928 00:40:45,869 --> 00:40:48,909 Y ya me quito todo esto 929 00:40:48,909 --> 00:40:53,340 De aquí 930 00:40:53,340 --> 00:40:54,679 Vale 931 00:40:54,679 --> 00:40:56,420 Ya tenemos el get 932 00:40:56,420 --> 00:40:57,760 El remove 933 00:40:57,760 --> 00:41:00,639 Pues será 934 00:41:00,639 --> 00:41:03,039 En punto remove 935 00:41:03,039 --> 00:41:07,610 Del objeto 936 00:41:07,610 --> 00:41:11,019 Y ya está 937 00:41:11,019 --> 00:41:12,519 No estoy validando nada 938 00:41:12,519 --> 00:41:13,579 El en punto remove 939 00:41:13,579 --> 00:41:15,099 me devuelve 940 00:41:15,099 --> 00:41:17,699 un valor 941 00:41:17,699 --> 00:41:19,320 ¿verdad que sí? 942 00:41:19,380 --> 00:41:21,500 el remove, ah no, también está hecho 943 00:41:21,500 --> 00:41:23,719 como void aquí, pues entonces 944 00:41:23,719 --> 00:41:26,039 malamente puedo usarlo 945 00:41:26,039 --> 00:41:26,340 vale 946 00:41:26,340 --> 00:41:28,980 te avisará por excepción 947 00:41:28,980 --> 00:41:30,079 si hay algún problema 948 00:41:30,079 --> 00:41:31,659 y ahora 949 00:41:31,659 --> 00:41:34,519 el update como tal es raro 950 00:41:34,519 --> 00:41:37,300 porque en realidad update como tal no existe 951 00:41:37,300 --> 00:41:39,400 tú cambias el objeto, haces con él lo que quieras 952 00:41:39,400 --> 00:41:41,360 y cuando según vayas 953 00:41:41,360 --> 00:41:43,659 haciendo los commit, ya se actualiza 954 00:41:43,659 --> 00:41:45,000 entonces el update como tal es raro 955 00:41:45,000 --> 00:41:47,219 pero se suele usar el método merge 956 00:41:47,219 --> 00:41:47,960 merge 957 00:41:47,960 --> 00:41:51,599 como el equivalente a actualizar 958 00:41:51,599 --> 00:41:53,260 porque con ese obligas 959 00:41:53,260 --> 00:41:55,480 al objeto a que se actualice también 960 00:41:55,480 --> 00:41:58,500 entonces, aquí 961 00:41:58,500 --> 00:42:01,380 podríamos hacer en punto 962 00:42:01,380 --> 00:42:03,320 merge object 963 00:42:03,320 --> 00:42:05,340 pero el 964 00:42:05,340 --> 00:42:07,219 update del 965 00:42:07,219 --> 00:42:07,920 dao es raro 966 00:42:07,920 --> 00:42:13,280 Sí, es que siempre se me olvida 967 00:42:13,280 --> 00:42:13,900 Y aquí también 968 00:42:13,900 --> 00:42:14,960 Y ahí también 969 00:42:14,960 --> 00:42:24,880 Ya estamos con esto 970 00:42:24,880 --> 00:42:36,139 Jolín, comid 971 00:42:36,139 --> 00:42:37,219 Leches 972 00:42:37,219 --> 00:42:44,119 Me estáis poniendo muy nerviosa 973 00:42:44,119 --> 00:42:46,519 Da igual 974 00:42:46,519 --> 00:42:47,780 Me ponéis nerviosa 975 00:42:47,780 --> 00:42:49,980 Con vuestra sola presencia 976 00:42:49,980 --> 00:42:52,480 Da lo mismo 977 00:42:52,480 --> 00:43:00,019 Por favor 978 00:43:00,019 --> 00:43:04,500 ¿No sabéis desaparecer así automáticamente? 979 00:43:07,079 --> 00:43:09,000 A veces te vendría muy bien, ¿verdad? 980 00:43:12,139 --> 00:43:14,219 No, a veces te vendría bien a ti 981 00:43:14,219 --> 00:43:16,780 en situaciones en las cuales no te apetece estar 982 00:43:16,780 --> 00:43:19,940 En la mayoría, el 90% 983 00:43:19,940 --> 00:43:22,360 Vale, pues entonces 984 00:43:22,360 --> 00:43:24,099 ahora 985 00:43:24,099 --> 00:43:26,760 yo sintiéndolo muchísimo 986 00:43:26,760 --> 00:43:27,480 muchísimo 987 00:43:27,480 --> 00:43:30,260 no, no, no, está estupendo