1 00:00:02,859 --> 00:00:28,219 Vale, pues los métodos del servicio que habíamos hecho, estos de aquí, en el contexto de ellos es donde vive el entity manager, ¿vale? El gestor de objetos, el que los maneja. En el contexto de ellos se abre y se cierra, por lo cual en el contexto de ellos es donde hacemos las transacciones. 2 00:00:28,219 --> 00:00:34,420 porque las transacciones se tienen que hacer dentro de un entity manager 3 00:00:34,420 --> 00:00:39,060 antes de que se cierre, entonces es lo habitual 4 00:00:39,060 --> 00:00:45,799 que el entity manager tenga vida solamente dentro de cada caso de uso 5 00:00:45,799 --> 00:00:52,420 o de cada método de servicio, más o menos es lo habitual 6 00:00:52,420 --> 00:00:54,859 que cada caso de uso sea independiente de los demás 7 00:00:54,859 --> 00:00:56,500 y tenga su propio gestor de objetos 8 00:00:56,500 --> 00:00:59,560 Recordar la trascendencia que tenía esto 9 00:00:59,560 --> 00:01:01,679 Porque si hacíamos que el entity manager 10 00:01:01,679 --> 00:01:03,380 En lugar de vivir aquí 11 00:01:03,380 --> 00:01:05,879 Y tener todo su nacimiento y muerte 12 00:01:05,879 --> 00:01:08,159 A nivel de caso de uso 13 00:01:08,159 --> 00:01:09,700 Si en lugar de tenerlo ahí 14 00:01:09,700 --> 00:01:11,480 Lo tuviera 15 00:01:11,480 --> 00:01:17,099 Lo tuviera 16 00:01:17,099 --> 00:01:19,280 Aquí 17 00:01:19,280 --> 00:01:23,680 Vale, si lo tuviera 18 00:01:23,680 --> 00:01:25,239 Aquí 19 00:01:25,239 --> 00:01:29,959 El problema que tendríamos es que por ejemplo 20 00:01:29,959 --> 00:01:33,840 en el get, si lo tenemos 21 00:01:33,840 --> 00:01:35,280 inicializado como lazy 22 00:01:35,280 --> 00:01:37,700 el get de un objeto 23 00:01:37,700 --> 00:01:39,680 no recoge todas las cosas 24 00:01:39,680 --> 00:01:41,239 relacionadas con clave ajena 25 00:01:41,239 --> 00:01:43,859 no las recoge, solo las recoge 26 00:01:43,859 --> 00:01:45,840 cuando las pidamos específicamente 27 00:01:45,840 --> 00:01:47,640 entonces si 28 00:01:47,640 --> 00:01:49,219 tuviéramos aquí el entity manager 29 00:01:49,219 --> 00:01:51,019 naciendo y muriéndose 30 00:01:51,019 --> 00:01:53,920 y luego ya en el caso de uso 31 00:01:53,920 --> 00:01:55,640 una vez recuperado el objeto 32 00:01:55,640 --> 00:01:57,560 quisiéramos acceder a lo relacionado 33 00:01:57,560 --> 00:01:59,659 con clave ajena, pues tendríamos 34 00:01:59,659 --> 00:02:01,780 un LaysInitializationException, etc. 35 00:02:02,359 --> 00:02:03,659 ¿Vale? Era un poquito 36 00:02:03,659 --> 00:02:04,719 alguna de las cosas que 37 00:02:04,719 --> 00:02:07,659 vimos el otro día. 38 00:02:07,799 --> 00:02:08,939 Bueno, pues entonces nos vamos aquí 39 00:02:08,939 --> 00:02:11,740 al caso de uso que era 40 00:02:11,740 --> 00:02:13,219 este 41 00:02:13,219 --> 00:02:15,000 nuestro. 42 00:02:16,099 --> 00:02:17,819 ¿Vale? Como estos de aquí eran todos 43 00:02:17,819 --> 00:02:19,259 de recuperar 44 00:02:19,259 --> 00:02:21,680 departamento, recuperarlo 45 00:02:21,680 --> 00:02:23,340 con todos sus empleados. 46 00:02:23,860 --> 00:02:25,639 ¿Vale? Para lo cual llamábamos a este 47 00:02:25,639 --> 00:02:27,460 DAO que 48 00:02:27,460 --> 00:02:29,580 implicó que hiciéramos una 49 00:02:29,580 --> 00:02:31,219 sentencia JPQL 50 00:02:31,219 --> 00:02:33,599 que ya sabemos que 51 00:02:33,599 --> 00:02:35,599 más o menos es una sintaxis parecida 52 00:02:35,599 --> 00:02:37,580 al SQL, esa es la idea que 53 00:02:37,580 --> 00:02:39,659 nos tiene que quedar, que es parecida al SQL 54 00:02:39,659 --> 00:02:41,599 pero que trabaja con nombres de 55 00:02:41,599 --> 00:02:43,560 clases en lugar de nombres de tablas y con 56 00:02:43,560 --> 00:02:45,580 nombres de propiedades en lugar de nombres de campos 57 00:02:45,580 --> 00:02:47,819 entonces más o menos con esas dos ideas 58 00:02:47,819 --> 00:02:53,139 y con esas dos 59 00:02:53,139 --> 00:02:55,120 ideas y con la sintaxis general 60 00:02:55,120 --> 00:02:57,080 de cómo se crean, pues 61 00:02:57,080 --> 00:02:58,460 uno ya puede ubicar 62 00:02:58,460 --> 00:03:00,960 dónde tiene eso interés 63 00:03:00,960 --> 00:03:02,659 Y si tiene que hacer una JPQL 64 00:03:02,659 --> 00:03:04,039 Concreta de algo 65 00:03:04,039 --> 00:03:05,680 Pues la busca y ya está 66 00:03:05,680 --> 00:03:07,560 No nos vamos a prender el JPQL 67 00:03:07,560 --> 00:03:11,360 Bueno, pues estos métodos de aquí 68 00:03:11,360 --> 00:03:16,300 Estos de aquí 69 00:03:16,300 --> 00:03:18,699 Como no implicaban modificar 70 00:03:18,699 --> 00:03:19,800 La base de datos 71 00:03:19,800 --> 00:03:22,419 No estaban en una transacción 72 00:03:22,419 --> 00:03:24,439 Aunque si se pone, pues no pasa nada 73 00:03:24,439 --> 00:03:27,180 Y ahora ya si que teníamos estos de aquí 74 00:03:27,180 --> 00:03:28,719 Que eran los que habéis hecho vosotros 75 00:03:28,719 --> 00:03:30,419 Hoy vais a hacer que si implican 76 00:03:30,419 --> 00:03:32,199 Obligatoriamente una transacción 77 00:03:32,199 --> 00:03:34,580 Obligatorio, JPA y Bernat en particular 78 00:03:34,580 --> 00:03:35,599 Que es el que está debajo 79 00:03:35,599 --> 00:03:38,439 Te obliga para que se modifique 80 00:03:38,439 --> 00:03:39,199 La base de datos 81 00:03:39,199 --> 00:03:42,580 Entonces aquí, pues por ejemplo habréis hecho 82 00:03:42,580 --> 00:03:43,860 Algo 83 00:03:43,860 --> 00:03:45,939 Parecido a esto 84 00:03:45,939 --> 00:03:47,879 Suponemos 85 00:03:47,879 --> 00:03:49,960 Pues el 86 00:03:49,960 --> 00:03:51,300 El entity manager 87 00:03:51,300 --> 00:03:56,650 Lo creamos aquí 88 00:03:56,650 --> 00:03:58,189 Vale 89 00:03:58,189 --> 00:04:02,719 Y ahora ya, pues crear un departamento 90 00:04:02,719 --> 00:04:04,780 con empleados. Bueno, pues primero tendremos 91 00:04:04,780 --> 00:04:06,080 que hacer el transitorio. 92 00:04:14,169 --> 00:04:14,530 Departamento... 93 00:04:14,530 --> 00:04:14,689 ¿Eh? 94 00:04:16,170 --> 00:04:17,610 Sí, bueno, lo que pasa es que la transacción 95 00:04:17,610 --> 00:04:18,790 hasta el momento de 96 00:04:18,790 --> 00:04:21,170 no empezar a hacerlo persistente no hace falta. 97 00:04:21,269 --> 00:04:23,449 Pero bueno, sí, por orden, por organización, la puedo 98 00:04:23,449 --> 00:04:24,209 hacer aquí y ya está. 99 00:04:30,939 --> 00:04:33,160 ¿Qué silencio? Bueno, ha vuelto. 100 00:04:35,420 --> 00:04:35,779 Vale. 101 00:04:35,959 --> 00:04:37,459 Entonces, ahora mismo este objeto, 102 00:04:37,620 --> 00:04:39,399 pues vamos a crear un departamento 103 00:04:39,399 --> 00:04:46,680 nombre de departamento 104 00:04:46,680 --> 00:04:48,399 el que nos han pasado por parámetro 105 00:04:48,399 --> 00:04:49,779 se supone, claro 106 00:04:49,779 --> 00:04:51,720 departamento con empleados 107 00:04:51,720 --> 00:04:54,439 y ahora, ¿qué más cosas tiene 108 00:04:54,439 --> 00:04:55,339 el departamento? 109 00:04:55,980 --> 00:04:58,279 tiene su 110 00:04:58,279 --> 00:05:00,819 clave, pero la clave como es autoincrement 111 00:05:00,819 --> 00:05:02,519 no la fijamos, ya la generará la base 112 00:05:02,519 --> 00:05:04,459 de datos, y luego tiene su 113 00:05:04,459 --> 00:05:06,480 lista de empleados, la lista de 114 00:05:06,480 --> 00:05:08,439 empleados nos han pasado los nombres, pues vamos 115 00:05:08,439 --> 00:05:09,759 a crear primero esa lista 116 00:05:09,759 --> 00:05:33,910 vale, aquí como esta lista 117 00:05:33,910 --> 00:05:36,209 esto en realidad 118 00:05:36,209 --> 00:05:37,709 no tiene mayor trascendencia porque 119 00:05:37,709 --> 00:05:40,410 para, pero bueno 120 00:05:40,410 --> 00:05:42,069 como esta lista 121 00:05:42,069 --> 00:05:44,490 en realidad solo la voy a usar 122 00:05:44,490 --> 00:05:46,250 para crearla 123 00:05:46,250 --> 00:05:48,410 y meter cosas en ella, luego se la doy a alguien 124 00:05:48,410 --> 00:05:50,069 y me olvido, no voy a usarla para 125 00:05:50,069 --> 00:05:51,750 navegar por ella ni consultar 126 00:05:51,750 --> 00:05:53,870 pues a mi me sale 127 00:05:53,870 --> 00:05:56,269 de forma natural hacer una lista enlazada 128 00:05:56,269 --> 00:05:58,189 que ya sabéis que es 129 00:05:58,189 --> 00:05:59,509 muy poco costosa 130 00:05:59,509 --> 00:06:01,649 Para inserciones y borrados 131 00:06:01,649 --> 00:06:04,709 Aunque mucho para consultas 132 00:06:04,709 --> 00:06:06,370 Y aquí como lo que vamos a hacer 133 00:06:06,370 --> 00:06:07,730 Va a ser insertar, insertar 134 00:06:07,730 --> 00:06:10,290 ¿Vale? Sin embargo ArrayList ya sabéis 135 00:06:10,290 --> 00:06:12,170 Que es muy costosa 136 00:06:12,170 --> 00:06:13,649 Para inserciones y borrados 137 00:06:13,649 --> 00:06:15,470 Porque hay que deshacer y construir el Array 138 00:06:15,470 --> 00:06:18,250 Pero muy ligera para consultas 139 00:06:18,250 --> 00:06:19,569 Porque vas por índice y ya está 140 00:06:19,569 --> 00:06:21,389 Bueno, pues aquí a mí me saldría un link 141 00:06:21,389 --> 00:06:23,230 ¿Vale? 142 00:06:24,970 --> 00:06:25,949 Detallitos y cosas 143 00:06:25,949 --> 00:06:26,970 Que si alguien 144 00:06:26,970 --> 00:06:29,410 Se pone muy pejiguero 145 00:06:29,410 --> 00:06:31,089 Alguna prueba técnica de Java 146 00:06:31,089 --> 00:06:32,069 O lo que sea 147 00:06:32,069 --> 00:06:35,610 Le vais soltando 148 00:06:35,610 --> 00:06:37,550 Estas cosas y parece que sabéis un montón 149 00:06:37,550 --> 00:06:40,839 Bueno 150 00:06:40,839 --> 00:06:42,959 Pues todo esto para que era, para añadir los empleados 151 00:06:42,959 --> 00:06:44,639 Pues 152 00:06:44,639 --> 00:06:46,060 Empleados 153 00:06:46,060 --> 00:06:49,439 A empleados le vamos a añadir 154 00:06:49,439 --> 00:06:50,180 Los que me han dado 155 00:06:50,180 --> 00:06:52,920 Empleados.add 156 00:06:52,920 --> 00:06:55,000 New 157 00:06:55,000 --> 00:06:58,319 Empleado 158 00:06:58,319 --> 00:07:03,019 Y tengo un constructor por nombre 159 00:07:03,019 --> 00:07:04,660 de empleado porque si lo tuviera 160 00:07:04,660 --> 00:07:06,860 sería estupendo 161 00:07:06,860 --> 00:07:08,259 yo iría recorriendo esto 162 00:07:08,259 --> 00:07:14,839 menor que nombres 163 00:07:14,839 --> 00:07:15,959 empleados 164 00:07:15,959 --> 00:07:21,439 punto size 165 00:07:21,439 --> 00:07:27,339 pues por cada nombre de empleado 166 00:07:27,339 --> 00:07:29,000 me creo un objeto empleado y lo añado 167 00:07:29,000 --> 00:07:31,160 entonces empleado no sé si tenía un constructor 168 00:07:31,160 --> 00:07:32,519 solamente con nombre de 169 00:07:32,519 --> 00:07:46,420 adelante, no lo tiene 170 00:07:46,420 --> 00:07:47,339 pues se lo voy a poner 171 00:07:47,339 --> 00:07:50,019 y así me ahorro líneas 172 00:07:50,019 --> 00:07:52,259 luego en el, le voy a crear un 173 00:07:52,259 --> 00:07:53,120 Constructor 174 00:07:53,120 --> 00:07:55,600 Solamente con el nombre 175 00:07:55,600 --> 00:07:59,670 Ahora 176 00:07:59,670 --> 00:08:01,709 Si tengo un constructor solamente con el nombre 177 00:08:01,709 --> 00:08:03,089 Lo voy a tener más fácil aquí 178 00:08:03,089 --> 00:08:05,170 New empleado 179 00:08:05,170 --> 00:08:07,509 Nombres 180 00:08:07,509 --> 00:08:10,629 Empleados 181 00:08:10,629 --> 00:08:18,680 Nombres empleados punto 182 00:08:18,680 --> 00:08:20,360 Get i 183 00:08:20,360 --> 00:08:26,939 Vale y 184 00:08:26,939 --> 00:08:34,320 Con esto estoy 185 00:08:34,320 --> 00:08:36,460 construyendo la lista 186 00:08:36,460 --> 00:08:38,419 de los empleados y ahora ya una vez que la 187 00:08:38,419 --> 00:08:40,440 tengo se la fijo al departamento 188 00:08:40,440 --> 00:08:42,299 de .set 189 00:08:42,299 --> 00:08:44,399 empleados, la lista que acabo de hacer 190 00:08:44,399 --> 00:08:46,220 vale 191 00:08:46,220 --> 00:08:48,360 ahora es cuando 192 00:08:48,360 --> 00:08:50,559 voy a hacer persistente este objeto 193 00:08:50,559 --> 00:08:52,039 departamento que era transitorio 194 00:08:52,039 --> 00:08:54,419 su id tampoco lo he fijado porque el id era 195 00:08:54,419 --> 00:08:55,960 autoincrement en la base de datos 196 00:08:55,960 --> 00:08:57,100 entonces tampoco lo he fijado 197 00:08:57,100 --> 00:09:00,259 entonces ahora es cuando yo lo haría 198 00:09:00,259 --> 00:09:02,220 persistente, ahora ya sí que es importante que la 199 00:09:02,220 --> 00:09:03,620 transacción esté arrancada 200 00:09:03,620 --> 00:09:06,720 Creo que es lo que me vas a decir 201 00:09:06,720 --> 00:09:16,559 Eso es lo que vamos a ver 202 00:09:16,559 --> 00:09:17,519 ¿Vale? 203 00:09:18,340 --> 00:09:20,200 Vale, entonces, a ver, aquí 204 00:09:20,200 --> 00:09:22,159 Uno podría pensar 205 00:09:22,159 --> 00:09:25,779 Que la relación ya está construida 206 00:09:25,779 --> 00:09:26,559 Porque 207 00:09:26,559 --> 00:09:28,340 Si yo le he añadido 208 00:09:28,340 --> 00:09:30,259 Si yo le he añadido al departamento 209 00:09:30,259 --> 00:09:31,259 Los empleados 210 00:09:31,259 --> 00:09:34,580 Ya la he construido a nivel de objeto 211 00:09:34,580 --> 00:09:35,539 Entonces 212 00:09:35,539 --> 00:09:38,100 si JPA y el hibernate 213 00:09:38,100 --> 00:09:39,860 que hay por debajo están listos 214 00:09:39,860 --> 00:09:42,279 y nosotros lo usamos 215 00:09:42,279 --> 00:09:44,000 porque es listo y nos facilita la vida 216 00:09:44,000 --> 00:09:46,039 pues él ya cuando haga las 217 00:09:46,039 --> 00:09:48,000 inserciones correspondientes a esto 218 00:09:48,000 --> 00:09:50,059 es decir, a lo que nos tocaría 219 00:09:50,059 --> 00:09:51,259 hacer a nosotros es 220 00:09:51,259 --> 00:09:54,200 el persis departamento 221 00:09:54,200 --> 00:09:55,080 ¿vale? 222 00:09:56,179 --> 00:10:00,639 esto lo, bueno pues 223 00:10:00,639 --> 00:10:02,860 aquí hay dos cosas, en esta sentencia 224 00:10:02,860 --> 00:10:03,980 hay dos cosas 225 00:10:03,980 --> 00:10:09,019 en esta de aquí, vale 226 00:10:09,019 --> 00:10:11,360 Ay, perdón, la transacción, sí, sí 227 00:10:11,360 --> 00:10:12,500 Que se me olvida todo 228 00:10:12,500 --> 00:10:14,879 Vale, entonces 229 00:10:14,879 --> 00:10:16,919 .bet 230 00:10:16,919 --> 00:10:19,759 Transaction.commit 231 00:10:19,759 --> 00:10:21,899 Porque si no, pues es como si no hubiera hecho nada 232 00:10:21,899 --> 00:10:22,419 Vale 233 00:10:22,419 --> 00:10:25,740 Bueno, pues aquí en esta sentencia hay dos cosas 234 00:10:25,740 --> 00:10:27,419 Entonces se supone que JPA 235 00:10:27,419 --> 00:10:29,679 Hibernate es para facilitarnos la vida 236 00:10:29,679 --> 00:10:31,480 A la hora de hacer el CRUD 237 00:10:31,480 --> 00:10:33,580 En cualquiera de sus 238 00:10:33,580 --> 00:10:35,379 Variantes, inserciones, modificados 239 00:10:35,379 --> 00:10:36,080 Entonces yo aquí 240 00:10:36,080 --> 00:10:38,679 quiero hacer la inserción de un departamento 241 00:10:38,679 --> 00:10:39,639 con un montón de empleados 242 00:10:39,639 --> 00:10:42,659 entonces, al haber hecho esta sentencia 243 00:10:42,659 --> 00:10:43,179 de aquí 244 00:10:43,179 --> 00:10:54,899 al haber hecho esta 245 00:10:54,899 --> 00:10:55,820 jodines 246 00:10:55,820 --> 00:11:00,940 al haber hecho 247 00:11:00,940 --> 00:11:19,120 pues al haber hecho esa sentencia de ahí 248 00:11:19,120 --> 00:11:21,379 nosotros en el mundo 249 00:11:21,379 --> 00:11:23,419 de los objetos, que es el único 250 00:11:23,419 --> 00:11:24,759 que nos interesa a nosotros 251 00:11:24,759 --> 00:11:26,980 ahora mismo desarrollando esta aplicación 252 00:11:26,980 --> 00:11:30,460 en el mundo de los objetos ya está toda la relación especificada 253 00:11:30,460 --> 00:11:32,779 tengo el departamento con sus datos 254 00:11:32,779 --> 00:11:37,759 y mi departamento tiene aquí colgando su propiedad de empleado 255 00:11:37,759 --> 00:11:39,000 con todos los empleados 256 00:11:39,000 --> 00:11:43,360 con lo cual el empleado está ligado al departamento 257 00:11:43,360 --> 00:11:45,779 porque cuelga de él en su propiedad lista 258 00:11:45,779 --> 00:11:48,019 y el departamento está ligado a los empleados 259 00:11:48,019 --> 00:11:52,120 entonces esa relación en el mundo de los objetos estaría completa 260 00:11:52,120 --> 00:11:53,159 ¿vale? 261 00:11:54,100 --> 00:11:55,080 eso por un lado 262 00:11:55,080 --> 00:12:13,840 Entonces nosotros podríamos pensar que JPA debería ser tan listo para decir, vale, ahora yo de esta sentencia, perdón, de esta sentencia de aquí, en la que tú me pides que convierta este objeto persistente, yo ya hago todos los SQL necesarios para hacerlo sin ser de los empleados. 263 00:12:13,840 --> 00:12:16,120 como yo veo que empleado está colgando 264 00:12:16,120 --> 00:12:17,779 de aquí, fijar 265 00:12:17,779 --> 00:12:19,980 el id de departamento para que 266 00:12:19,980 --> 00:12:22,059 apunte a este departamento que acabo 267 00:12:22,059 --> 00:12:24,019 de insertar, todo eso debería 268 00:12:24,019 --> 00:12:25,860 funcionar y hacerlo, porque si no 269 00:12:25,860 --> 00:12:26,799 no están listos 270 00:12:26,799 --> 00:12:29,779 vamos a verlo, vale 271 00:12:29,779 --> 00:12:31,860 pero tendría sentido según la filosofía de 272 00:12:31,860 --> 00:12:34,039 JPA que yo construyo mis objetos 273 00:12:34,039 --> 00:12:35,980 y las relaciones entre mis 274 00:12:35,980 --> 00:12:37,919 objetos vienen dadas porque unos están dentro 275 00:12:37,919 --> 00:12:39,860 de otros, por ahí vienen dadas, porque unos están 276 00:12:39,860 --> 00:12:40,519 dentro de otros 277 00:12:40,519 --> 00:12:43,379 entonces, este 278 00:12:43,379 --> 00:12:45,539 Es un problema que muchas veces 279 00:12:45,539 --> 00:12:47,039 Causa errores 280 00:12:47,039 --> 00:12:48,539 Porque no es así 281 00:12:48,539 --> 00:12:51,080 Para JPA en todas las relaciones 282 00:12:51,080 --> 00:12:53,159 Uno manda 283 00:12:53,159 --> 00:12:55,340 Que es el que se llama el propietario 284 00:12:55,340 --> 00:12:56,820 Y otro 285 00:12:56,820 --> 00:13:01,059 Y otro es el seguidor 286 00:13:01,059 --> 00:13:01,980 De alguna manera 287 00:13:01,980 --> 00:13:03,799 Entonces 288 00:13:03,799 --> 00:13:06,659 En una relación, ¿quién manda? 289 00:13:07,740 --> 00:13:08,220 Para 290 00:13:08,220 --> 00:13:10,399 Manda el lado del many 291 00:13:10,399 --> 00:13:12,820 Siempre, el que tiene la clave ajena 292 00:13:12,820 --> 00:13:14,720 su tabla, entonces en la relación 293 00:13:14,720 --> 00:13:16,100 departamento a empleados 294 00:13:16,100 --> 00:13:19,139 el propietario, el que manda es el empleado 295 00:13:19,139 --> 00:13:20,440 ¿vale? 296 00:13:20,539 --> 00:13:22,720 el que manda, entonces 297 00:13:22,720 --> 00:13:25,139 JPA convierte 298 00:13:25,139 --> 00:13:26,539 los SQL 299 00:13:26,539 --> 00:13:29,059 los tiene que hacer de tal manera 300 00:13:29,059 --> 00:13:30,700 que arranquen desde 301 00:13:30,700 --> 00:13:32,379 empleado, entonces 302 00:13:32,379 --> 00:13:34,759 si yo aquí estoy arrancando desde departamento 303 00:13:34,759 --> 00:13:36,860 esto no me va a funcionar, vamos a 304 00:13:36,860 --> 00:13:38,919 comprobarlo ahora, ¿vale? vamos a comprobarlo 305 00:13:38,919 --> 00:13:41,279 ahora, eso por un lado 306 00:13:41,279 --> 00:13:45,299 Y ahora ya por otro lado 307 00:13:45,299 --> 00:13:46,360 Imaginamos que eso 308 00:13:46,360 --> 00:13:47,840 Entonces, ¿cómo arreglaríamos eso? 309 00:13:48,279 --> 00:13:49,259 Con lo que me habéis dicho 310 00:13:49,259 --> 00:13:52,700 Bueno, pues voy a fijar yo 311 00:13:52,700 --> 00:13:54,639 En el empleado 312 00:13:54,639 --> 00:13:56,059 Su departamento 313 00:13:56,059 --> 00:13:58,159 ¿Vale? Pero lo fijamos ahora 314 00:13:58,159 --> 00:14:00,220 Cuando nos salga el error y veamos que no funciona 315 00:14:00,220 --> 00:14:02,879 Y luego, por otro lado 316 00:14:02,879 --> 00:14:04,200 Vamos a suponer 317 00:14:04,200 --> 00:14:06,279 Que eso ya lo hemos arreglado 318 00:14:06,279 --> 00:14:07,639 Y todo eso, por otro lado 319 00:14:07,639 --> 00:14:10,299 El que yo haga la persistencia 320 00:14:10,299 --> 00:14:11,980 Del objeto implica 321 00:14:11,980 --> 00:14:13,460 Que hago la persistencia también 322 00:14:13,460 --> 00:14:14,919 De todos los que cuelgan de él 323 00:14:14,919 --> 00:14:17,539 Sí o no 324 00:14:17,539 --> 00:14:18,259 O depende 325 00:14:18,259 --> 00:14:21,039 Sí, no o depende 326 00:14:21,039 --> 00:14:22,799 ¿Cuál diríais de esas tres? 327 00:14:22,879 --> 00:14:24,379 Es un 33,3% 328 00:14:24,379 --> 00:14:31,870 ¿Alguien dice otra cosa? 329 00:14:32,450 --> 00:14:33,330 Diferente de no 330 00:14:33,330 --> 00:14:38,899 Bueno, pues es la opción C 331 00:14:38,899 --> 00:14:39,539 Depende 332 00:14:39,539 --> 00:14:43,059 Depende del atributo cascade 333 00:14:43,059 --> 00:14:45,299 ¿Vale? 334 00:14:45,779 --> 00:14:47,639 ¿Recordáis que cuando hemos puesto anotaciones 335 00:14:47,639 --> 00:14:49,559 aquí 336 00:14:49,559 --> 00:14:52,559 claro, el atributo 337 00:14:52,559 --> 00:14:54,799 cascade en la relación es el que te dice 338 00:14:54,799 --> 00:14:56,299 cuando tú haces 339 00:14:56,299 --> 00:14:58,120 una acción con un objeto 340 00:14:58,120 --> 00:15:00,519 si esa acción se va a trasladar a los que 341 00:15:00,519 --> 00:15:02,320 cuelgan de él, entonces por eso 342 00:15:02,320 --> 00:15:03,879 el atributo cascade podía ser 343 00:15:03,879 --> 00:15:06,620 cascade persist, cascade remove 344 00:15:06,620 --> 00:15:08,360 cascade all 345 00:15:08,360 --> 00:15:10,360 que es todo lo que tú hagas que se transmita 346 00:15:10,360 --> 00:15:12,179 a los hijos, entonces vamos a ver 347 00:15:12,179 --> 00:15:14,299 aquí en departamento que cascade teníamos 348 00:15:14,299 --> 00:15:16,779 en departamento 349 00:15:16,779 --> 00:15:19,799 en la relación que tiene con empleado 350 00:15:19,799 --> 00:15:20,440 que es esta 351 00:15:20,440 --> 00:15:22,519 perdón 352 00:15:22,519 --> 00:15:25,639 teníamos este, con lo cual 353 00:15:25,639 --> 00:15:28,379 si yo hago la persistencia del departamento 354 00:15:28,379 --> 00:15:30,059 debería hacerse también 355 00:15:30,059 --> 00:15:32,059 automáticamente en cascada 356 00:15:32,059 --> 00:15:34,159 la de todos los empleados 357 00:15:34,159 --> 00:15:36,120 que cuelgan de él, debería hacerse en cascada 358 00:15:36,120 --> 00:15:38,399 ¿vale? porque tengo puesto eso 359 00:15:38,399 --> 00:15:42,320 si tengo cascada 360 00:15:42,320 --> 00:15:44,299 de remove, pues recordad 361 00:15:44,299 --> 00:15:45,940 que mencionamos que el cascada de remove 362 00:15:45,940 --> 00:15:47,759 es el más peligroso, porque 363 00:15:47,759 --> 00:15:49,799 si tú eliminas un objeto y el 364 00:15:49,799 --> 00:15:51,720 cascade está en 365 00:15:51,720 --> 00:15:53,960 cascade.remove, eliminas 366 00:15:53,960 --> 00:15:56,039 todos los que colgan de él, entonces 367 00:15:56,039 --> 00:15:59,679 aquí no es tan grave, eliminar un 368 00:15:59,679 --> 00:16:01,620 departamento te pules a todos los empleados 369 00:16:01,620 --> 00:16:03,179 no es tan grave, lo clave sería 370 00:16:03,179 --> 00:16:05,100 si tienes el cascade 371 00:16:05,100 --> 00:16:08,299 el cascade 372 00:16:08,299 --> 00:16:11,259 aquí 373 00:16:11,259 --> 00:16:15,950 aquí lo tenemos en la opción por defecto 374 00:16:15,950 --> 00:16:16,870 que habría que ver cuál es 375 00:16:16,870 --> 00:16:19,590 Seguro que no es el 376 00:16:19,590 --> 00:16:20,909 All ni el remove 377 00:16:20,909 --> 00:16:23,450 Porque aquí sí que sería grave poner un 378 00:16:23,450 --> 00:16:25,289 Cascade type remove 379 00:16:25,289 --> 00:16:27,110 Porque si borro el departamento 380 00:16:27,110 --> 00:16:29,649 Perdón, si borro 381 00:16:29,649 --> 00:16:30,409 El empleado 382 00:16:30,409 --> 00:16:34,009 Si lo borro, pues borro el departamento 383 00:16:34,009 --> 00:16:35,769 Que tira de él y eso es lo que no 384 00:16:35,769 --> 00:16:36,269 Querría 385 00:16:36,269 --> 00:16:39,289 Entonces, vamos a preguntarle 386 00:16:39,289 --> 00:16:41,169 A este hombre 387 00:16:41,169 --> 00:16:43,590 ¿Vale? ¿Cuáles son los valores 388 00:16:43,590 --> 00:16:45,129 Por defecto de 389 00:16:45,129 --> 00:16:47,389 De los cascades 390 00:16:47,389 --> 00:16:52,000 A ver, valores por defecto 391 00:16:52,000 --> 00:16:54,000 Valores 392 00:16:54,000 --> 00:17:01,120 Cascade type 393 00:17:01,120 --> 00:17:05,160 Por curiosidad 394 00:17:05,160 --> 00:17:08,759 ¿Cómo que no? 395 00:17:12,440 --> 00:17:15,099 Bueno, vale, o sea, por defecto es que no hay ninguna 396 00:17:15,099 --> 00:17:15,859 Vale 397 00:17:15,859 --> 00:17:32,190 O sea, por defecto en ninguna de ellas 398 00:17:32,190 --> 00:17:34,450 Se hace el cascade 399 00:17:34,450 --> 00:17:35,069 ¿Vale? 400 00:17:36,470 --> 00:17:37,950 Lo curioso es 401 00:17:37,950 --> 00:17:39,609 Lo que sí es 402 00:17:39,609 --> 00:17:41,670 Los curiosos son los valores por defecto 403 00:17:41,670 --> 00:17:43,890 Del fetch type, estos sí que son un caos 404 00:17:43,890 --> 00:17:52,349 El lazy, el no sé qué 405 00:17:52,349 --> 00:17:55,390 Depende 406 00:17:55,390 --> 00:17:57,049 De la relación 407 00:17:57,049 --> 00:17:59,230 De la one to one 408 00:17:59,230 --> 00:18:02,349 Es el eager, o sea, si tienes una relación de uno a uno 409 00:18:02,349 --> 00:18:04,029 Te lo va a cargar siempre, por defecto 410 00:18:04,029 --> 00:18:05,309 A menos que te especifiques que no 411 00:18:05,309 --> 00:18:08,960 Y de many to one 412 00:18:08,960 --> 00:18:10,119 También 413 00:18:10,119 --> 00:18:13,099 Es decir, en el empleado 414 00:18:13,099 --> 00:18:15,740 Te carga siempre su departamento 415 00:18:15,740 --> 00:18:17,579 Siempre, a menos que tú digas lo contrario 416 00:18:17,579 --> 00:18:19,900 Porque claro, esta es menos pesada, es cargar un departamento 417 00:18:19,900 --> 00:18:21,460 Pero en la one to many 418 00:18:21,460 --> 00:18:23,059 Tiene sentido que esta sea por 419 00:18:23,059 --> 00:18:24,859 Estas dos 420 00:18:24,859 --> 00:18:26,680 Que tiran de muchos 421 00:18:26,680 --> 00:18:29,220 Tiene sentido que por defecto sean lazy 422 00:18:29,220 --> 00:18:31,559 Porque estas tiran de muchos, tendrían que cargar muchos 423 00:18:31,559 --> 00:18:32,559 ¿Vale? 424 00:18:33,480 --> 00:18:35,660 Y esto no sé lo que es, así que da igual 425 00:18:35,660 --> 00:18:38,480 ¿Vale? 426 00:18:39,279 --> 00:18:40,059 Bueno, pues 427 00:18:40,059 --> 00:18:43,339 Entonces, ya sabemos que 428 00:18:43,339 --> 00:18:45,700 Si no especificamos el elemento cascada de time 429 00:18:45,700 --> 00:18:46,839 No se va a propagar nada 430 00:18:46,839 --> 00:18:48,500 Si queremos que se propaga alguna cosa 431 00:18:48,500 --> 00:18:50,720 La tenemos que hacer específicamente 432 00:18:50,720 --> 00:18:53,160 Bueno, pues volvemos a nuestro servicio 433 00:18:53,160 --> 00:18:53,819 Este de aquí 434 00:18:53,819 --> 00:19:00,740 Tendríamos que hacerles persistencia 435 00:19:00,740 --> 00:19:01,480 Uno por uno 436 00:19:01,480 --> 00:19:03,559 Es decir, en este for de aquí 437 00:19:03,559 --> 00:19:06,920 En lugar de ponerlo con una referencia anónima 438 00:19:06,920 --> 00:19:08,680 Pues le damos una referencia 439 00:19:08,680 --> 00:19:10,160 Y le hacemos el persist y ya está 440 00:19:10,160 --> 00:19:11,640 ¿Vale? 441 00:19:11,640 --> 00:19:13,640 Y luego ya hacemos el persist del departamento 442 00:19:14,240 --> 00:19:15,940 ¿Vale? 443 00:19:15,940 --> 00:19:42,900 Bueno, pues vamos a probar esto a ver qué nos hace. Entonces, teníamos aquí ya un main2, imagino, en el que probábamos los nuevos. Vale, entonces, los que habíamos hecho estos de aquí no se habían funcionado, supongo, porque están aquí probados. 444 00:19:42,900 --> 00:19:55,400 Y ahora vamos a empresaservice.crearDepartamentoConEmpleados. 445 00:19:55,759 --> 00:19:58,500 A ver, ¿dónde está este? 446 00:20:08,059 --> 00:20:12,680 Departamento, casas, ventas, departamento, coches. 447 00:20:13,660 --> 00:20:15,599 Que echáis de menos los coches, seguro. 448 00:20:18,400 --> 00:20:22,849 El departamento de coches. 449 00:20:22,849 --> 00:20:25,569 Y aquí 450 00:20:25,569 --> 00:20:28,549 Tenemos que pasar la lista de empleados 451 00:20:28,549 --> 00:20:29,690 Pues venga 452 00:20:29,690 --> 00:21:06,109 No, de empleado no, de string 453 00:21:06,109 --> 00:21:07,490 Perdón, aquí van los nombres 454 00:21:07,490 --> 00:21:13,150 Bueno, voy a hacer un array, lo convierto a lista y se acabó 455 00:21:13,150 --> 00:21:17,390 Si hay formas mucho más cómodas 456 00:21:17,390 --> 00:21:42,049 Y ahora 457 00:21:42,049 --> 00:21:45,410 Empleados 458 00:21:45,410 --> 00:21:47,470 Lo podré pasar a una lista 459 00:21:47,470 --> 00:21:47,690 ¿No? 460 00:21:48,130 --> 00:21:51,920 Listo 461 00:21:51,920 --> 00:21:56,640 De empleados 462 00:21:56,640 --> 00:21:58,220 Dos 463 00:21:58,220 --> 00:22:03,200 Por ejemplo, vale 464 00:22:03,200 --> 00:22:06,519 Y aquí que he hecho mal 465 00:22:06,519 --> 00:22:06,940 Que 466 00:22:06,940 --> 00:22:09,279 Esto, ¿verdad? 467 00:22:11,210 --> 00:22:13,849 He hecho mal, eso, ahora sí 468 00:22:13,849 --> 00:22:14,750 Vale 469 00:22:14,750 --> 00:22:20,569 Ya está, vamos a ver si esto 470 00:22:20,569 --> 00:22:22,410 Se crea, este caso de uso 471 00:22:22,410 --> 00:22:33,940 No funciona, vale 472 00:22:33,940 --> 00:22:35,740 Entonces, nos sale 473 00:22:35,740 --> 00:22:38,420 Hemos 474 00:22:38,420 --> 00:22:41,940 Vale, pues justo 475 00:22:41,940 --> 00:22:44,019 El error que nos esperábamos 476 00:22:44,019 --> 00:22:54,200 él ya ha anunciado, ¿vale? Cuando él trata de insertar a los empleados, te dice, oye, yo no resuelvo por mí mismo el ID de departamento, 477 00:22:54,339 --> 00:23:03,839 que ya podría, ¿no? Jolín, ya podría, pero si dentro de este caso de uso ya hemos metido el empleado dentro del departamento, 478 00:23:03,839 --> 00:23:05,380 pues realmente ya podría 479 00:23:05,380 --> 00:23:08,059 pero no, alguna manera algunas reglas 480 00:23:08,059 --> 00:23:10,599 y como el empleado es el dueño 481 00:23:10,599 --> 00:23:11,960 de la relación 482 00:23:11,960 --> 00:23:12,799 pues 483 00:23:12,799 --> 00:23:16,380 el campo ID de departamento 484 00:23:16,380 --> 00:23:18,279 que es específico suyo y que hay que hacer 485 00:23:18,279 --> 00:23:20,440 con su propio insert, hay que fijárselo 486 00:23:20,440 --> 00:23:22,259 no lo vamos a resolver a través del otro 487 00:23:22,259 --> 00:23:24,559 entonces 488 00:23:24,559 --> 00:23:26,380 esto 489 00:23:26,380 --> 00:23:28,980 lo arreglamos 490 00:23:28,980 --> 00:23:30,720 sin problema pues 491 00:23:30,720 --> 00:23:35,500 aquí creamos el empleado 492 00:23:35,500 --> 00:23:37,720 aparte y le fijamos 493 00:23:37,720 --> 00:23:39,980 el departamento 494 00:23:39,980 --> 00:23:40,779 entonces 495 00:23:40,779 --> 00:23:44,079 empleado e 496 00:23:44,079 --> 00:23:56,140 y ahora ya le hacemos 497 00:23:56,140 --> 00:23:58,579 que e.set 498 00:23:58,579 --> 00:24:00,880 departamento este que acabamos 499 00:24:00,880 --> 00:24:02,680 de crear y ahora aquí 500 00:24:02,680 --> 00:24:04,220 añadimos el e 501 00:24:04,220 --> 00:24:12,750 esto 502 00:24:12,750 --> 00:24:16,609 vale 503 00:24:16,609 --> 00:24:18,569 Esto se suele resolver 504 00:24:18,569 --> 00:24:19,910 Como esto es muy pesado 505 00:24:19,910 --> 00:24:24,099 El acordarse, entre comillas 506 00:24:24,099 --> 00:24:25,519 Es muy pesado el acordarse 507 00:24:25,519 --> 00:24:27,519 Porque es una acción natural 508 00:24:27,519 --> 00:24:30,039 Un caso de uso natural de cualquier aplicación 509 00:24:30,039 --> 00:24:32,220 En el que hay un objeto que tiene muchos otros colgando 510 00:24:32,220 --> 00:24:34,819 Un caso de uso natural es añadirle algo 511 00:24:34,819 --> 00:24:36,720 Entonces como es muy pesado 512 00:24:36,720 --> 00:24:38,099 Pues acordarse 513 00:24:38,099 --> 00:24:39,859 Que hay que fijar la clave y todo esto 514 00:24:39,859 --> 00:24:42,700 Esto se suele resolver normalmente 515 00:24:42,700 --> 00:24:44,240 Poniendo ya un método 516 00:24:44,240 --> 00:24:46,880 En la propia clase de departamento 517 00:24:46,880 --> 00:24:48,279 ¿Vale? 518 00:24:48,440 --> 00:24:53,619 Entonces, podríamos poner un método en la propia clase de departamento para añadir empleado. 519 00:24:54,660 --> 00:25:01,720 Entonces, en la propia clase de departamento que está aquí, cuando uno ve que tiene algo aquí colgando, 520 00:25:01,880 --> 00:25:07,539 una colección colgando, automáticamente ya ve que aquí hay una clave ajena, ve uno a muchos. 521 00:25:08,599 --> 00:25:11,059 Entonces, si es de uno a muchos, el propietario es la otra. 522 00:25:11,839 --> 00:25:17,259 Entonces, la otra tiene un campo que hay que fijar directamente desde la otra clase. 523 00:25:17,259 --> 00:25:18,359 No se puede desde aquí 524 00:25:18,359 --> 00:25:20,220 Entonces 525 00:25:20,220 --> 00:25:23,059 Identificando eso se suele 526 00:25:23,059 --> 00:25:26,980 Añadir ya un método 527 00:25:26,980 --> 00:25:34,410 Para añadir empleado 528 00:25:34,410 --> 00:25:35,869 Que te mete eso 529 00:25:35,869 --> 00:25:39,710 Empleado E 530 00:25:39,710 --> 00:25:41,650 Y aquí 531 00:25:41,650 --> 00:25:44,289 A E se le fija 532 00:25:44,289 --> 00:25:46,890 El departamento 533 00:25:46,890 --> 00:25:48,390 Este, el dis 534 00:25:48,390 --> 00:25:49,150 Y ahora ya 535 00:25:49,150 --> 00:25:56,170 a empleados.ad 536 00:25:56,170 --> 00:25:57,390 e 537 00:25:57,390 --> 00:26:01,049 ¿vale? 538 00:26:06,680 --> 00:26:08,640 entonces con este método ya 539 00:26:08,640 --> 00:26:11,279 resolveríamos esto 540 00:26:11,279 --> 00:26:12,180 entonces 541 00:26:12,180 --> 00:26:15,480 lo digo porque es un método típico 542 00:26:15,480 --> 00:26:17,480 en una clase en la que uno identifica 543 00:26:17,480 --> 00:26:19,619 esto, que tiene una relación de uno a muchos 544 00:26:19,619 --> 00:26:21,680 pues añadir este método 545 00:26:21,680 --> 00:26:23,680 que pum, se asegura 546 00:26:23,680 --> 00:26:25,420 de que no te olvidas 547 00:26:25,420 --> 00:26:27,839 de fijar esta parte de aquí 548 00:26:27,839 --> 00:26:30,619 pero bueno 549 00:26:30,619 --> 00:26:33,819 con JP hay tropecientas mil 550 00:26:33,819 --> 00:26:35,539 pequeñas casuísticas distintas 551 00:26:35,539 --> 00:26:37,559 que se pueden dar, pero conociendo la base 552 00:26:37,559 --> 00:26:39,099 que ya la sabéis 553 00:26:39,099 --> 00:26:41,359 objetos que mapean 554 00:26:41,359 --> 00:26:43,759 o clases que mapean tablas 555 00:26:43,759 --> 00:26:46,099 a partir de ahí pues ya es ir probando 556 00:26:46,099 --> 00:26:47,319 voy fijando propiedades 557 00:26:47,319 --> 00:26:49,220 me dice que me falta esta cosa 558 00:26:49,220 --> 00:26:51,980 no tiene más que luego 559 00:26:51,980 --> 00:26:53,779 ir explorando las diferentes casuísticas 560 00:26:53,779 --> 00:26:54,660 raras que pueden salir 561 00:26:54,660 --> 00:26:56,460 Entonces 562 00:26:56,460 --> 00:26:59,180 Vale 563 00:26:59,180 --> 00:27:01,140 Con este método ad empleado 564 00:27:01,140 --> 00:27:03,099 Ahora ya nuestro 565 00:27:03,099 --> 00:27:05,680 Caso de uso 566 00:27:05,680 --> 00:27:06,440 Este de aquí 567 00:27:06,440 --> 00:27:12,039 Pues esto se quedaría 568 00:27:12,039 --> 00:27:13,400 Para cada empleado 569 00:27:13,400 --> 00:27:15,700 Voy a añadirselo al 570 00:27:15,700 --> 00:27:17,400 Este 571 00:27:17,400 --> 00:27:18,299 Vale 572 00:27:18,299 --> 00:27:21,799 Voy creando los empleados 573 00:27:21,799 --> 00:27:23,660 Y se los añado al departamento 574 00:27:23,660 --> 00:27:26,160 Creo el empleado y se lo añado al departamento 575 00:27:26,160 --> 00:27:27,720 Y me olvido ya del 576 00:27:27,720 --> 00:27:31,480 Matiz, entonces 577 00:27:31,480 --> 00:27:33,619 Vamos a ponerlo aquí, como subiremos 578 00:27:33,619 --> 00:27:35,559 Esto, vamos a ponerlo aquí 579 00:27:35,559 --> 00:27:41,420 La lista que tenía 580 00:27:41,420 --> 00:27:43,500 Donde aquí 581 00:27:43,500 --> 00:27:44,740 Eh 582 00:27:44,740 --> 00:27:46,740 De atempleado E 583 00:27:46,740 --> 00:27:48,819 Esta 584 00:27:48,819 --> 00:27:51,299 Esto de aquí, esta me sobra 585 00:27:51,299 --> 00:27:52,880 Y esto de aquí me sobra 586 00:27:52,880 --> 00:27:55,519 ¿Vale? O sea, esto me sobra 587 00:27:55,519 --> 00:27:56,880 Y esto me sobraría 588 00:27:56,880 --> 00:27:59,119 Porque se lo voy añadiendo ya aquí directamente 589 00:27:59,119 --> 00:28:00,839 ¿Vale? 590 00:28:01,180 --> 00:28:41,720 Entonces, apartamento para que se fije el campo clave ajena desde el empleado, 591 00:28:41,720 --> 00:28:46,140 Que es el propietario 592 00:28:46,140 --> 00:28:48,420 De la relación 593 00:28:48,420 --> 00:28:50,019 Vale 594 00:28:50,019 --> 00:28:52,420 Este es un ejemplito 595 00:28:52,420 --> 00:28:54,440 Repito, de millones de pequeñas 596 00:28:54,440 --> 00:28:56,440 Situaciones que se dan 597 00:28:56,440 --> 00:28:58,460 Y uno pues va resolviendo sobre la marcha 598 00:28:58,460 --> 00:29:00,140 Es un pequeño ejemplo, pero estos son un poco 599 00:29:00,140 --> 00:29:02,059 Los más típicos, vale 600 00:29:02,059 --> 00:29:03,920 Por eso pues los sacamos aquí, por eso son un poco 601 00:29:03,920 --> 00:29:05,200 Los más típicos y los 602 00:29:05,200 --> 00:29:08,480 Básicos para tener una visión de JPA 603 00:29:08,480 --> 00:29:09,839 También es cierto que JPA 604 00:29:09,839 --> 00:29:12,460 recordad que es una capa por encima del hibernate puro 605 00:29:12,460 --> 00:29:19,140 que a su vez JPA es una subcapa de luego Spring Data JPA 606 00:29:19,140 --> 00:29:24,559 entonces JPA pone reglas un poquito más estrictas 607 00:29:24,559 --> 00:29:26,279 que el hibernate puro 608 00:29:26,279 --> 00:29:27,839 si usáramos hibernate puro 609 00:29:27,839 --> 00:29:31,359 que si nos da tiempo al final 610 00:29:31,359 --> 00:29:34,140 pues en 5, 10, 15 minutos podemos verlo 611 00:29:34,140 --> 00:29:35,720 por curiosidad 612 00:29:35,720 --> 00:29:38,420 el hibernate puro traga mucho 613 00:29:38,420 --> 00:29:39,859 y con muchísima facilidad 614 00:29:39,859 --> 00:29:41,220 es mucho más flexible 615 00:29:41,220 --> 00:29:44,480 cuando le ponemos la especificación JPA por encima 616 00:29:44,480 --> 00:29:46,279 para ya usar 617 00:29:46,279 --> 00:29:47,559 los métodos de JPA 618 00:29:47,559 --> 00:29:50,099 las reglas son más estrictas 619 00:29:50,099 --> 00:29:52,420 y tiene sentido, porque JPA lo que trata 620 00:29:52,420 --> 00:29:53,880 de dar es una especie de 621 00:29:53,880 --> 00:29:55,480 paraguas que unifique 622 00:29:55,480 --> 00:29:57,720 la forma de desarrollar de todos 623 00:29:57,720 --> 00:30:00,700 entonces tiene sentido que fija unas reglas un poco más estrictas 624 00:30:00,700 --> 00:30:05,039 vale, pues entonces 625 00:30:05,039 --> 00:30:06,579 ahora ya sí que vamos a probarlo 626 00:30:06,579 --> 00:30:08,680 A ver si hay algo 627 00:30:08,680 --> 00:30:10,619 Por ahí todavía en la que lo hayamos 628 00:30:10,619 --> 00:30:12,359 Cagado, que intuyo que sí 629 00:30:12,359 --> 00:30:14,519 Intuyo que hay algo más 630 00:30:14,519 --> 00:30:15,500 Todavía que 631 00:30:15,500 --> 00:30:18,339 En la que lo vamos a haber cagado 632 00:30:18,339 --> 00:30:31,109 Mi intuición 633 00:30:31,109 --> 00:30:32,569 Era cierta 634 00:30:32,569 --> 00:30:34,450 ¿No os estaba escamando mucho 635 00:30:34,450 --> 00:30:37,210 Algo a vosotros cuando yo lo estaba escribiendo? 636 00:30:38,069 --> 00:30:38,650 Pues a mí no 637 00:30:38,650 --> 00:30:40,789 Claro 638 00:30:40,789 --> 00:30:41,430 Pero por qué 639 00:30:41,430 --> 00:30:44,390 Claro, a vosotros os lo ha cogido 640 00:30:44,390 --> 00:30:46,470 Pero porque igual vosotros tenéis 641 00:30:46,470 --> 00:30:48,730 Inicializado esta 642 00:30:48,730 --> 00:30:50,130 Yo no la tenía 643 00:30:50,130 --> 00:30:51,390 ¿Vale? 644 00:30:54,930 --> 00:30:55,230 ¿Eh? 645 00:30:58,319 --> 00:31:00,680 Que tú tampoco la tenías inicializada 646 00:31:00,680 --> 00:31:01,880 Y si te lo ha cogido 647 00:31:01,880 --> 00:31:05,920 Pues no sé cuál es la diferencia 648 00:31:05,920 --> 00:31:08,519 Pero yo según estaba añadiendo esto 649 00:31:08,519 --> 00:31:10,099 Estaba pensando, lógicamente 650 00:31:10,099 --> 00:31:11,920 Cuando haga la 651 00:31:11,920 --> 00:31:13,740 Añada el primer empleado 652 00:31:13,740 --> 00:31:16,299 Esto va a saltar un grupo interseptio 653 00:31:16,299 --> 00:31:17,559 Pero bueno, lo he dejado así 654 00:31:17,559 --> 00:31:18,599 Para 655 00:31:18,599 --> 00:31:22,539 Entonces 656 00:31:22,539 --> 00:31:42,099 ¿Dónde te refieres? 657 00:31:42,539 --> 00:31:43,819 En el link en list 658 00:31:43,819 --> 00:31:45,059 Ah 659 00:31:45,059 --> 00:31:48,539 A ver 660 00:31:48,539 --> 00:31:52,339 Sería cuestión de verlo 661 00:31:52,339 --> 00:31:52,779 Yo es que 662 00:31:52,779 --> 00:31:55,180 Me sale siempre de forma natural esta 663 00:31:55,180 --> 00:31:56,660 Porque me gusta más 664 00:31:56,660 --> 00:31:58,079 no sé, me gusta más 665 00:31:58,079 --> 00:32:00,700 es más flexible en el sentido 666 00:32:00,700 --> 00:32:02,420 de que la implementación 667 00:32:02,420 --> 00:32:04,279 linked list te habilita 668 00:32:04,279 --> 00:32:06,599 todos los métodos de pilas, colas, listas 669 00:32:06,599 --> 00:32:08,440 por ejemplo, que la implementación de ArrayList 670 00:32:08,440 --> 00:32:10,460 no, entonces pues yo le tengo 671 00:32:10,460 --> 00:32:11,640 a esa especial 672 00:32:11,640 --> 00:32:15,170 especial querencia 673 00:32:15,170 --> 00:32:17,970 aquí en particular la he puesto por eso 674 00:32:17,970 --> 00:32:19,789 no porque 675 00:32:19,789 --> 00:32:21,970 porque realmente no sé 676 00:32:21,970 --> 00:32:24,089 el uso que luego va a hacer la aplicación 677 00:32:24,089 --> 00:32:25,950 de esta lista, en este punto no lo puedo saber 678 00:32:25,950 --> 00:32:29,990 entonces pues no lo sé 679 00:32:29,990 --> 00:32:32,150 Por defecto yo que sé, cada uno tendrá su 680 00:32:32,150 --> 00:32:34,109 Realmente no sé si hay una 681 00:32:34,109 --> 00:32:42,619 Vale, perdonad que le pregunte tanto 682 00:32:42,619 --> 00:32:44,720 Pero es que yo creo que todas las cosas 683 00:32:44,720 --> 00:32:47,039 Que nos dice nos aportan en general 684 00:32:47,039 --> 00:32:57,880 A ver si nos da 685 00:32:57,880 --> 00:32:58,880 En general 686 00:32:58,880 --> 00:33:03,710 A ver si nos dice algo interesante que se nos 687 00:33:03,710 --> 00:33:05,069 Puede escapar a nosotros 688 00:33:05,069 --> 00:33:09,799 Vaya hombre, pues 689 00:33:09,799 --> 00:33:14,299 No lo sé, a mí siempre me gusta el otro, no sé por qué 690 00:33:14,299 --> 00:33:17,539 Pues mira 691 00:33:17,539 --> 00:33:21,299 Es verdad que el acceso es más rápido 692 00:33:21,299 --> 00:33:23,339 Y bueno, mejor uso de caché 693 00:33:23,339 --> 00:33:25,019 Pues ya está, pues nada 694 00:33:25,019 --> 00:33:29,319 Si él lo dice, pues supongo que tendrá razón 695 00:33:29,319 --> 00:33:33,970 Vale 696 00:33:33,970 --> 00:33:35,329 Bueno, pues entonces 697 00:33:35,329 --> 00:33:36,509 Vamos a volver a probar esto 698 00:33:36,509 --> 00:33:46,089 A ver, lo que salga ahora ya no me lo espero 699 00:33:46,089 --> 00:33:49,609 Menos mal, que no ha salido ningún error 700 00:33:49,609 --> 00:33:51,009 Porque no me lo esperaba 701 00:33:51,009 --> 00:33:53,750 Y sí, tiene toda la pinta de que 702 00:33:53,750 --> 00:33:55,529 El cascá de Persis lo ha hecho 703 00:33:55,529 --> 00:33:58,009 Porque aquí hay un montón de inserts de empleados 704 00:33:58,009 --> 00:33:59,930 Hay tres inserts de empleados 705 00:33:59,930 --> 00:34:01,289 Y un insert de departamento 706 00:34:01,289 --> 00:34:04,509 Así que todo perfecto y magnífico 707 00:34:04,509 --> 00:34:06,569 Vale 708 00:34:06,569 --> 00:34:08,789 Aquí están los 709 00:34:08,789 --> 00:34:13,719 Aquí está el nuevo departamento de coches 710 00:34:13,719 --> 00:34:17,380 Y aquí están 711 00:34:17,380 --> 00:34:18,360 Los empleados 712 00:34:18,360 --> 00:34:23,380 Entonces realmente 713 00:34:23,380 --> 00:34:25,440 Es muchísimo más cómodo 714 00:34:25,440 --> 00:34:27,059 Trabajar con un ORM 715 00:34:27,059 --> 00:34:29,559 Que con JDBC 716 00:34:29,559 --> 00:34:31,960 Que tener que hacer los SQL 717 00:34:31,960 --> 00:34:32,659 De todo 718 00:34:32,659 --> 00:34:35,420 es mucho más cómodo 719 00:34:35,420 --> 00:34:37,119 eso sí, tiene un montón de peso 720 00:34:37,119 --> 00:34:38,780 por debajo, tarda un huevo 721 00:34:38,780 --> 00:34:40,619 es mucho más pesado, pero bueno 722 00:34:40,619 --> 00:34:43,239 a ver, siguiente y último 723 00:34:43,239 --> 00:34:45,239 método de esta aplicación 724 00:34:45,239 --> 00:34:49,349 trasladar un empleado 725 00:34:49,349 --> 00:34:51,110 de un sitio a otro 726 00:34:51,110 --> 00:34:52,849 este 727 00:34:52,849 --> 00:34:55,190 lo habéis hecho, os ha salido 728 00:34:55,190 --> 00:34:55,949 no os ha salido 729 00:34:55,949 --> 00:35:00,389 bueno, pues 730 00:35:00,389 --> 00:35:02,909 yo esto lo enfocaría 731 00:35:02,909 --> 00:35:05,269 trasladar empleado, pues cogería el empleado 732 00:35:05,269 --> 00:35:07,289 Cogería el departamento y haría el set 733 00:35:07,289 --> 00:35:08,849 Del departamento del empleado y ya está 734 00:35:08,849 --> 00:35:10,710 Vamos a ver 735 00:35:10,710 --> 00:35:16,710 Cogemos esto 736 00:35:16,710 --> 00:35:22,550 Y ahora 737 00:35:22,550 --> 00:35:24,329 ¿Qué necesito? 738 00:35:24,570 --> 00:35:26,389 El empleado, pues venga 739 00:35:26,389 --> 00:35:32,260 Y el empleado lo cojo 740 00:35:32,260 --> 00:35:32,719 De 741 00:35:32,719 --> 00:35:37,719 Del 742 00:35:37,719 --> 00:35:40,500 Del genérico 743 00:35:40,500 --> 00:35:41,500 De implementación DAO 744 00:35:41,500 --> 00:35:42,239 Porque es un GET 745 00:35:42,239 --> 00:35:44,719 Entonces lo puedo coger 746 00:35:44,719 --> 00:35:47,659 Me voy a hacer el implementación DAO 747 00:35:47,659 --> 00:35:50,619 Voy a copiar de aquí arriba 748 00:35:50,619 --> 00:35:58,369 Este, pero que va a ser de empleado 749 00:35:58,369 --> 00:36:04,710 Sí, voy a necesitar los dos, tienes razón 750 00:36:04,710 --> 00:36:05,409 Vale 751 00:36:05,409 --> 00:36:08,449 Voy a necesitar los dos, pues este 752 00:36:08,449 --> 00:36:10,230 Y este 753 00:36:10,230 --> 00:36:12,469 Pero este va a ser de 754 00:36:12,469 --> 00:36:14,590 Empleado 755 00:36:14,590 --> 00:36:18,679 Y esto va a ser 756 00:36:18,679 --> 00:36:21,059 Empleado 757 00:36:21,059 --> 00:36:22,739 Vale 758 00:36:22,739 --> 00:36:23,920 Dao 759 00:36:23,920 --> 00:36:25,920 De departamento 760 00:36:25,920 --> 00:36:28,880 Y dao de empleado 761 00:36:28,880 --> 00:36:31,940 Vale, y ahora ya sí que sí 762 00:36:31,940 --> 00:36:33,480 Me cojo el empleado 763 00:36:33,480 --> 00:36:35,079 A través del suyo 764 00:36:35,079 --> 00:36:37,320 Con get 765 00:36:37,320 --> 00:36:39,440 Empleado id 766 00:36:39,440 --> 00:36:44,039 Empleado id 767 00:36:44,039 --> 00:36:51,269 Me cojo el departamento 768 00:36:51,269 --> 00:36:54,769 De a través del suyo 769 00:36:54,769 --> 00:36:56,889 Que es dao 770 00:36:56,889 --> 00:36:59,789 departamento get 771 00:36:59,789 --> 00:37:03,530 nuevo departamento idea 772 00:37:03,530 --> 00:37:14,039 vale, entonces la relación es doble, es bidireccional 773 00:37:14,039 --> 00:37:17,820 lógicamente, en una relación bidireccional 774 00:37:17,820 --> 00:37:22,539 las modificaciones nos ponemos en el chip de hacerla 775 00:37:22,539 --> 00:37:26,659 siempre desde el lado propietario, desde el lado propietario 776 00:37:26,659 --> 00:37:30,940 que en este caso es el empleado, pues al empleado le fijo como departamento 777 00:37:30,940 --> 00:37:32,400 Ese, y ya está 778 00:37:32,400 --> 00:37:34,940 E.set departamento 779 00:37:34,940 --> 00:37:35,739 Este de aquí 780 00:37:35,739 --> 00:37:39,880 Y ahora 781 00:37:39,880 --> 00:37:42,420 Si yo hago un commit 782 00:37:42,420 --> 00:37:45,340 Pues ya debería 783 00:37:45,340 --> 00:37:46,440 Esto hacerse 784 00:37:46,440 --> 00:37:51,480 O eso creo 785 00:37:51,480 --> 00:38:05,559 No, porque aquí 786 00:38:05,559 --> 00:38:07,519 El empleado manda 787 00:38:07,519 --> 00:38:09,619 Es el propietario, entonces él sí que va a generar 788 00:38:09,619 --> 00:38:10,500 Todos los SQL 789 00:38:10,500 --> 00:38:12,739 que se deriven de ese 790 00:38:12,739 --> 00:38:15,739 en el lado inverso es donde no se van a 791 00:38:15,739 --> 00:38:17,340 generar todos los que se derivan, por eso 792 00:38:17,340 --> 00:38:19,539 cuando hemos hecho el persis de departamento antes 793 00:38:19,539 --> 00:38:21,579 que lo teníamos que hacer porque el departamento 794 00:38:21,579 --> 00:38:23,579 había que meterlo, de ese 795 00:38:23,579 --> 00:38:25,000 no se iba a derivar 796 00:38:25,000 --> 00:38:27,539 la modificación del empleado 797 00:38:27,539 --> 00:38:28,539 del ID departamento 798 00:38:28,539 --> 00:38:32,780 entonces, creemos que esto está bien 799 00:38:32,780 --> 00:38:38,679 vale, pues 800 00:38:38,679 --> 00:38:40,980 vamos a 801 00:38:40,980 --> 00:38:42,079 probarlo en nuestro 802 00:38:42,079 --> 00:38:43,780 main2 803 00:38:43,780 --> 00:39:01,039 y ahora 804 00:39:01,039 --> 00:39:03,019 Yo voy a trasladar 805 00:39:03,019 --> 00:39:09,010 Al 1 que está en el 15 806 00:39:09,010 --> 00:39:11,130 Lo voy a trasladar al 1 807 00:39:11,130 --> 00:39:13,289 Entonces voy a poner 1, 1 808 00:39:13,289 --> 00:39:14,789 A ver si en esta primera línea 809 00:39:14,789 --> 00:39:16,230 Me aparece 1, 1 810 00:39:16,230 --> 00:39:17,929 Vamos a ver 811 00:39:17,929 --> 00:39:19,929 1, 1 812 00:39:19,929 --> 00:39:23,710 Dime 813 00:39:23,710 --> 00:39:25,510 ¿Puedes poner el método otra vez? 814 00:39:26,769 --> 00:39:28,010 Uy, ¿dónde está? 815 00:39:31,940 --> 00:39:33,239 Este es 816 00:39:33,239 --> 00:39:37,489 Polina, ahora sí que está lloviendo 817 00:39:37,489 --> 00:39:47,079 ¿Cómo estáis tan desanimados? 818 00:39:47,079 --> 00:39:49,639 Con la clase 819 00:39:49,639 --> 00:39:51,199 Estamos aquí bajo mínimos 820 00:39:51,199 --> 00:39:53,179 ¿Es normal? 821 00:39:53,360 --> 00:39:54,659 ¿Tan poca asistencia? 822 00:39:55,920 --> 00:39:56,920 Mejor más silencio 823 00:39:56,920 --> 00:39:59,900 Bueno, vamos a ver 824 00:39:59,900 --> 00:40:01,800 A ejecutarlo, a ver 825 00:40:01,800 --> 00:40:03,340 A ver 826 00:40:03,340 --> 00:40:11,219 Era demasiado bonito 827 00:40:11,219 --> 00:40:14,340 Vale, ¿qué se nos ha olvidado aquí? 828 00:40:14,739 --> 00:40:15,219 Ah, bueno 829 00:40:15,219 --> 00:40:17,099 Constructor por defecto 830 00:40:17,099 --> 00:40:18,500 Ah, esto es fácil de arreglar 831 00:40:18,500 --> 00:40:21,219 Vale, el constructor por defecto de empleado 832 00:40:21,219 --> 00:40:24,619 Ah, claro, es que al haber puesto yo uno 833 00:40:24,619 --> 00:40:26,559 Así, he deshabilitado 834 00:40:26,559 --> 00:40:27,840 El otro, que lista, yo 835 00:40:27,840 --> 00:40:32,300 Entonces, claro, claro 836 00:40:32,300 --> 00:40:34,380 He creado este y me lo he cagado con el otro 837 00:40:34,380 --> 00:40:36,059 Vale 838 00:40:36,059 --> 00:40:38,940 Siguiente problema 839 00:40:38,940 --> 00:40:40,760 Vamos a ver si hay más problemas o no 840 00:40:40,760 --> 00:40:42,460 Estoy por dar el verde 841 00:40:42,460 --> 00:40:44,539 Porque estoy segura de que te da mucha rabia, Dani 842 00:40:44,539 --> 00:40:46,519 Cuando hago esto específicamente 843 00:40:46,519 --> 00:40:47,820 ¿Verdad? Y no le doy al verde, ¿no? 844 00:40:49,760 --> 00:40:50,159 Venga 845 00:40:50,159 --> 00:40:55,139 Vale, pues ya está 846 00:40:55,139 --> 00:40:58,260 tiene pinta de que sí, de que ha actualizado 847 00:40:58,260 --> 00:41:00,519 el empleado efectivamente poniendo el ID2 848 00:41:00,519 --> 00:41:02,340 y ha hecho su select antes 849 00:41:02,340 --> 00:41:04,340 entonces no haría falta ni comprobarlo 850 00:41:04,340 --> 00:41:05,820 pero 851 00:41:05,820 --> 00:41:07,179 lo ha hecho 852 00:41:07,179 --> 00:41:12,260 vale, pues esta es más o menos la idea 853 00:41:12,260 --> 00:41:14,860 os voy a dar 854 00:41:14,860 --> 00:41:16,699 otra base de datos, esta un poquito 855 00:41:16,699 --> 00:41:18,679 más compleja, con más tablas 856 00:41:18,679 --> 00:41:20,780 que tenga los tres tipos 857 00:41:20,780 --> 00:41:22,659 de relaciones que hay, que aquí solamente 858 00:41:22,659 --> 00:41:24,800 hemos visto la de uno a muchos o muchos a uno 859 00:41:24,800 --> 00:41:26,619 que tenga también uno a uno 860 00:41:26,619 --> 00:41:28,760 y muchos a muchos, porque la de muchos a muchos 861 00:41:28,760 --> 00:41:30,960 no es trivial, como se mapea 862 00:41:30,960 --> 00:41:32,780 se puede hacer de diferentes maneras 863 00:41:32,780 --> 00:41:34,780 ¿vale? entonces vamos a 864 00:41:34,780 --> 00:41:36,699 aprovechar el cambio para subir el script 865 00:41:36,699 --> 00:41:38,320 al aula virtual, que creo que no 866 00:41:38,320 --> 00:41:40,579 lo subí ayer 867 00:41:40,579 --> 00:41:43,139 y ahora