1 00:00:00,000 --> 00:00:01,780 Vale, pues entonces 2 00:00:01,780 --> 00:00:05,139 ¿Qué? 3 00:00:05,500 --> 00:00:07,500 Esta va a ser muy cortita, tenía que haber pausado 4 00:00:07,500 --> 00:00:08,980 Y se me ha olvidado 5 00:00:08,980 --> 00:00:11,699 Vale, pues ya está, y nos hicimos este 6 00:00:11,699 --> 00:00:16,000 Que nos creaba 7 00:00:16,000 --> 00:00:17,640 El entity manager 8 00:00:17,640 --> 00:00:18,620 Y ya está, ¿vale? 9 00:00:19,559 --> 00:00:21,519 El entity manager no es el singleton 10 00:00:21,519 --> 00:00:23,820 Es aparece y desaparece, el que lo es es este 11 00:00:23,820 --> 00:00:25,300 Este sí 12 00:00:25,300 --> 00:00:27,260 El factor 13 00:00:27,260 --> 00:00:28,239 Vale, pues ya está 14 00:00:28,239 --> 00:00:50,200 Entonces, nuestro JPA utilera este y ahora, ahora aquí la importancia está en dos sitios, en el modelo y en el DAO, porque ahí tenemos que hacerlo nosotros, no nos lo da Spring, ¿vale? 15 00:00:50,200 --> 00:00:53,240 entonces, en el modelo 16 00:00:53,240 --> 00:00:55,280 pues el modelo ya bien hecho, vamos a revisarlo 17 00:00:55,280 --> 00:00:57,259 porque con este revisamos más o menos todas las 18 00:00:57,259 --> 00:00:58,240 anotaciones que hemos visto 19 00:00:58,240 --> 00:01:00,460 la entidad sede 20 00:01:00,460 --> 00:01:03,060 pues bueno, la entidad sede 21 00:01:03,060 --> 00:01:05,299 estas 22 00:01:05,299 --> 00:01:06,939 anotaciones, no las sabemos de memoria 23 00:01:06,939 --> 00:01:09,099 ¿vale? una por tabla 24 00:01:09,099 --> 00:01:10,079 las sabemos de memoria 25 00:01:10,079 --> 00:01:11,780 clave primaria 26 00:01:11,780 --> 00:01:13,819 clave primaria id 27 00:01:13,819 --> 00:01:16,040 si es autoincrement 28 00:01:16,040 --> 00:01:18,760 y si hay algún cambio que queramos 29 00:01:18,760 --> 00:01:20,980 modificar, si hay algún cambio que queramos 30 00:01:20,980 --> 00:01:23,060 modificar en esa propiedad 31 00:01:23,060 --> 00:01:24,920 o columna, anotación 32 00:01:24,920 --> 00:01:27,000 column, en este caso 33 00:01:27,000 --> 00:01:28,819 el nombre porque en SQL 34 00:01:28,819 --> 00:01:30,760 se estilan mucho las barras 35 00:01:30,760 --> 00:01:32,620 bajas y en Java no, entonces 36 00:01:32,620 --> 00:01:33,400 pues ahí 37 00:01:33,400 --> 00:01:36,219 vale 38 00:01:36,219 --> 00:01:38,640 esto lo mismo, column 39 00:01:38,640 --> 00:01:45,079 claro, si puede ser nulo o no puede ser 40 00:01:45,079 --> 00:01:47,079 nul, pero bueno, estas cosas están así 41 00:01:47,079 --> 00:01:48,500 puestas porque 42 00:01:48,500 --> 00:01:53,719 que es la que te ofrece esa cacha GPT y al no quitarlas, 43 00:01:54,019 --> 00:01:55,700 es interesante así que las veamos, ¿vale? 44 00:01:56,540 --> 00:01:59,840 Esto lo podríamos quitar directamente, no os da igual. 45 00:02:00,000 --> 00:02:02,780 El tamaño, claro, el tamaño que fija para la columna. 46 00:02:03,340 --> 00:02:07,620 Vale, ahora ya sí, la sede tiene, ¿vale? 47 00:02:08,500 --> 00:02:12,319 La sede tiene un montón de departamentos gracias a esta clave ajena. 48 00:02:12,860 --> 00:02:14,879 Entonces, al tener un montón de departamentos, 49 00:02:14,879 --> 00:02:16,879 una sede, muchos departamentos, 50 00:02:16,879 --> 00:02:18,819 aquí es donde tendremos 51 00:02:18,819 --> 00:02:21,139 una lista 52 00:02:21,139 --> 00:02:23,680 o conjunto de proyectos 53 00:02:23,680 --> 00:02:25,580 ¿por qué lo he cambiado 54 00:02:25,580 --> 00:02:27,759 yo a conjuntos? luego lo vamos a entender 55 00:02:27,759 --> 00:02:29,360 porque lo he cambiado a conjuntos 56 00:02:29,360 --> 00:02:31,060 ¿vale? pero podría ser una lista 57 00:02:31,060 --> 00:02:31,819 da igual 58 00:02:31,819 --> 00:02:35,139 entonces, como esto viene 59 00:02:35,139 --> 00:02:37,219 de que hay una clave ajena de departamento 60 00:02:37,219 --> 00:02:38,699 a sede, pues one to many 61 00:02:38,699 --> 00:02:41,199 ¿dónde se indica el 62 00:02:41,199 --> 00:02:41,860 campo 63 00:02:41,860 --> 00:02:43,659 que 64 00:02:43,659 --> 00:02:46,659 representa la clave ajena? 65 00:02:46,879 --> 00:02:51,900 se indica en la entidad correspondiente a la tabla donde está la clave ajena. 66 00:02:52,039 --> 00:03:00,000 En este caso es, estoy aquí arriba, perdón, estoy aquí, es en departamento donde está la clave ajena. 67 00:03:00,580 --> 00:03:07,280 Pues entonces decimos, oye, cuidado, que el campo columna que es la clave ajena de la que tienes que tirar 68 00:03:07,280 --> 00:03:14,639 se mapea en la propiedad sede de la clase departamento, que es donde se tiene que mapear, 69 00:03:14,639 --> 00:03:17,240 en la propietaria de la relación 70 00:03:17,240 --> 00:03:19,379 en la entidad 71 00:03:19,379 --> 00:03:21,280 a partir de la cual se pueden hacer modificaciones 72 00:03:21,280 --> 00:03:23,000 etcétera, y ya está 73 00:03:23,000 --> 00:03:24,939 esto era el one to many 74 00:03:24,939 --> 00:03:29,139 claro, esto significa que 75 00:03:29,139 --> 00:03:31,520 automáticamente en la clase de departamento 76 00:03:31,520 --> 00:03:33,259 tiene que haber una propiedad 77 00:03:33,259 --> 00:03:34,599 sede, tiene que haberla 78 00:03:34,599 --> 00:03:37,259 y ahí tiene que estar especificada la clave 79 00:03:37,259 --> 00:03:38,740 ajena, la hay, vamos a ver 80 00:03:38,740 --> 00:03:40,840 pues 81 00:03:40,840 --> 00:03:43,340 si la hay 82 00:03:43,340 --> 00:03:46,039 hay una propiedad sede 83 00:03:46,039 --> 00:03:47,979 en la clase departamento 84 00:03:47,979 --> 00:03:49,479 y justo en ella 85 00:03:49,479 --> 00:03:52,159 se está indicando ahora ya sí 86 00:03:52,159 --> 00:03:53,319 cuál es la clave ajena 87 00:03:53,319 --> 00:03:55,400 mediante el yo en columna, ¿vale? 88 00:03:55,520 --> 00:03:56,599 Aquí es donde se indica. 89 00:03:59,120 --> 00:04:00,919 Es esto, tal cual. 90 00:04:01,900 --> 00:04:02,819 Este nombrecito. 91 00:04:07,460 --> 00:04:08,719 No, este es este. 92 00:04:09,219 --> 00:04:10,439 Este es este. 93 00:04:11,699 --> 00:04:12,620 Este de aquí. 94 00:04:12,620 --> 00:04:14,520 y de sede, la clave ajena 95 00:04:14,520 --> 00:04:19,740 el que solo sede es 96 00:04:19,740 --> 00:04:22,779 claro, el que solo sede 97 00:04:22,779 --> 00:04:23,600 este de aquí 98 00:04:23,600 --> 00:04:27,120 esto es el nombre 99 00:04:27,120 --> 00:04:28,540 de la propiedad 100 00:04:28,540 --> 00:04:30,379 dentro de la clase 101 00:04:30,379 --> 00:04:31,379 esta de aquí 102 00:04:31,379 --> 00:04:35,000 en esta clase tiene que haber una propiedad 103 00:04:35,000 --> 00:04:35,959 con este nombre 104 00:04:35,959 --> 00:04:37,519 vale 105 00:04:37,519 --> 00:04:39,800 vale 106 00:04:39,800 --> 00:04:42,920 vale, entonces cascada 107 00:04:42,920 --> 00:04:44,120 pues ya sabéis que esto 108 00:04:44,120 --> 00:04:46,899 las propiedades estas, pues bueno, estas si que 109 00:04:46,899 --> 00:04:48,959 no es el objetivo 110 00:04:48,959 --> 00:04:51,000 tampoco de nuestra evaluación 111 00:04:51,000 --> 00:04:52,980 el que os hagáis de memoria estas propiedades 112 00:04:52,980 --> 00:04:55,120 pero nos suenan, sabemos lo que significan 113 00:04:55,120 --> 00:04:57,040 entonces como nos suenan 114 00:04:57,040 --> 00:04:59,180 podría ocurrir 115 00:04:59,180 --> 00:05:00,459 que a lo mejor alguna cosa 116 00:05:00,459 --> 00:05:02,939 no esté funcionando como debería 117 00:05:02,939 --> 00:05:04,579 porque a lo mejor alguna de estas cosas 118 00:05:04,579 --> 00:05:06,279 no es como apuestan en el curso de cascada 119 00:05:06,279 --> 00:05:08,480 ya sabéis que significa 120 00:05:08,480 --> 00:05:10,759 cascada que es, cuando yo hago 121 00:05:10,759 --> 00:05:13,079 una operación en sede 122 00:05:13,079 --> 00:05:14,740 si esa operación 123 00:05:14,740 --> 00:05:16,699 se transmite a 124 00:05:16,699 --> 00:05:17,720 departamento o no 125 00:05:17,720 --> 00:05:20,699 aquí como es all, se transmite 126 00:05:20,699 --> 00:05:22,360 todo, si hago un persist 127 00:05:22,360 --> 00:05:24,000 un save, un 128 00:05:24,000 --> 00:05:26,639 remove, se transmite todo 129 00:05:26,639 --> 00:05:27,519 pero entonces 130 00:05:27,519 --> 00:05:30,500 dentro del departamento, dentro del proyecto sede 131 00:05:30,500 --> 00:05:32,540 tiene que haber una variable sede 132 00:05:32,540 --> 00:05:34,620 dentro del departamento tiene que haber una variable 133 00:05:34,620 --> 00:05:36,339 que se llame sede y aquí también 134 00:05:36,339 --> 00:05:38,399 dentro del proyecto sede tiene que haber una que se llame sede 135 00:05:38,399 --> 00:05:54,420 Se va a mapear siempre el extremo de many, es decir, se va a mapear en la entidad correspondiente a la tabla que tenga la clave ajena. 136 00:05:55,519 --> 00:05:59,839 Es decir, aquí es departamento quien tiene la clave ajena y de sede. 137 00:06:00,519 --> 00:06:05,259 Y aquí proyecto sede es quien tiene la clave ajena y de sede a sede. 138 00:06:05,259 --> 00:06:26,740 Con lo cual será en la entidad departamento y en la entidad proyecto sede donde se indica cuál es la columna. Por eso aquí hay un MAPED BY, esto está mapeado en departamento, la propiedad sede. Y aquí hay un MAPED BY, esto está mapeado en proyecto sede, en la propiedad sede. Ahí está. 139 00:06:26,740 --> 00:06:28,779 Claro, pero la propiedad sede tiene su id sede 140 00:06:28,779 --> 00:06:30,579 Entonces, ¿por qué? 141 00:06:30,600 --> 00:06:32,560 La propiedad sede es la propiedad sede 142 00:06:32,560 --> 00:06:33,980 O sea, id sede luego lo tiene 143 00:06:33,980 --> 00:06:35,980 La entidad sede 144 00:06:35,980 --> 00:06:40,230 Proyecto sede tiene su 145 00:06:40,230 --> 00:06:41,470 Proyecto sede 146 00:06:41,470 --> 00:06:44,550 Tiene su propiedad 147 00:06:44,550 --> 00:06:46,029 Sede, que es 148 00:06:46,029 --> 00:06:47,870 Esta 149 00:06:47,870 --> 00:06:50,009 Tiene su propiedad sede que te dice 150 00:06:50,009 --> 00:06:51,230 La clave ajena, ¿cuál es? 151 00:06:54,350 --> 00:06:54,990 Tiene ahí 152 00:06:54,990 --> 00:06:58,089 ¿Vale? Ahora vamos 153 00:06:58,089 --> 00:07:00,870 ¿Vale? Si esto al final son cuatro 154 00:07:00,870 --> 00:07:02,870 cosas, son cuatro cosas y lo mismo 155 00:07:02,870 --> 00:07:03,829 todo el rato 156 00:07:03,829 --> 00:07:08,990 no, porque 157 00:07:08,990 --> 00:07:10,889 es que no tenemos 158 00:07:10,889 --> 00:07:11,730 tiempo, pero 159 00:07:11,730 --> 00:07:14,089 vale, pero el 160 00:07:14,089 --> 00:07:16,910 claro, pero 161 00:07:16,910 --> 00:07:18,230 bueno, ahora cuando lleguemos al 162 00:07:18,230 --> 00:07:20,889 claro, porque 163 00:07:20,889 --> 00:07:22,490 hay una entidad intermedia 164 00:07:22,490 --> 00:07:24,730 pero podría no haberla, ahora cuando vayamos a ella 165 00:07:24,730 --> 00:07:26,490 mencionamos ese caso, vale 166 00:07:26,490 --> 00:07:28,730 no, no, no 167 00:07:28,730 --> 00:07:30,589 porque no hemos hecho ningún ejemplo por falta 168 00:07:30,589 --> 00:07:32,550 de tiempo, lo ideal habría sido que 169 00:07:32,550 --> 00:07:34,470 tuviéramos tenido tiempo para hacer 170 00:07:34,470 --> 00:07:36,370 muchos ejemplos con diferentes bases de datos 171 00:07:36,370 --> 00:07:38,009 diferentes tablas, diferentes cosas 172 00:07:38,009 --> 00:07:40,589 pero bueno, sabéis de que va el rollo y ya está 173 00:07:40,589 --> 00:07:42,370 ahora de todas formas mencionamos 174 00:07:42,370 --> 00:07:44,370 como sería ese caso cuando 175 00:07:44,370 --> 00:07:46,449 estemos ya en proyecto sede, entonces 176 00:07:46,449 --> 00:07:48,230 las anotaciones de sede 177 00:07:48,230 --> 00:07:50,670 pues están claras, el one to many 178 00:07:50,670 --> 00:07:51,850 porque lo hemos puesto aquí 179 00:07:51,850 --> 00:07:53,509 y las propiedades que tiene 180 00:07:53,509 --> 00:07:56,250 este era, oye 181 00:07:56,250 --> 00:07:58,810 que pasa si se queda 182 00:07:58,810 --> 00:08:00,410 alguno de estos 183 00:08:00,410 --> 00:08:02,850 si alguno de estos objetos 184 00:08:02,850 --> 00:08:05,050 departamentos resulta 185 00:08:05,050 --> 00:08:06,870 que ha perdido la sede a la que 186 00:08:06,870 --> 00:08:08,829 pertenece, porque esa sede 187 00:08:08,829 --> 00:08:10,930 ha dejado de ser persistente, ¿qué pasa 188 00:08:10,930 --> 00:08:12,990 con ese departamento? Pues el 189 00:08:12,990 --> 00:08:14,769 true significa fuera al departamento. 190 00:08:15,490 --> 00:08:15,670 ¿Vale? 191 00:08:16,509 --> 00:08:17,269 Se elimina. 192 00:08:19,769 --> 00:08:22,930 Pero el cascade, si tú haces específicamente 193 00:08:22,930 --> 00:08:25,269 un remove al departamento, 194 00:08:25,350 --> 00:08:26,970 pero el departamento puede haber desaparecido 195 00:08:26,970 --> 00:08:27,910 por otras razones. 196 00:08:29,290 --> 00:08:29,610 Puede haber 197 00:08:29,610 --> 00:08:32,909 O sea, perdón, la sede 198 00:08:32,909 --> 00:08:36,070 Claro, la sede puede haber desaparecido 199 00:08:36,070 --> 00:08:37,929 De la aplicación por otras razones 200 00:08:37,929 --> 00:08:39,389 Puede haberse quedado sin referencia 201 00:08:39,389 --> 00:08:40,950 Por otras cosas propias de Java 202 00:08:40,950 --> 00:08:43,409 Que no sean específicamente por hacer 203 00:08:43,409 --> 00:08:45,570 Una sentencia con el entity manager 204 00:08:45,570 --> 00:08:47,409 O sea, el cascade significa 205 00:08:47,409 --> 00:08:48,850 Cómo se 206 00:08:48,850 --> 00:08:50,649 Si tú haces un 207 00:08:50,649 --> 00:08:53,450 Si el entity manager hace una sentencia 208 00:08:53,450 --> 00:08:54,889 Sobre la sede 209 00:08:54,889 --> 00:08:57,850 Si esa misma sentencia se traslada al departamento 210 00:08:57,850 --> 00:08:59,769 si es la misma sentencia 211 00:08:59,769 --> 00:09:01,110 y Orphan Removal 212 00:09:01,110 --> 00:09:02,950 en particular en remove 213 00:09:02,950 --> 00:09:04,870 si tú haces remove de la sede 214 00:09:04,870 --> 00:09:06,710 se hace en remove del departamento 215 00:09:06,710 --> 00:09:08,730 y esto es algo más amplio 216 00:09:08,730 --> 00:09:10,809 es decir, si la sede ha desaparecido 217 00:09:10,809 --> 00:09:12,389 por la razón que sea 218 00:09:12,389 --> 00:09:14,470 por razones de Java 219 00:09:14,470 --> 00:09:16,850 no tiene que ser porque el entity manager la haya hecho 220 00:09:16,850 --> 00:09:19,289 pues si ha desaparecido, ¿qué pasa con el departamento? 221 00:09:19,429 --> 00:09:20,110 que se ha quedado ahí 222 00:09:20,110 --> 00:09:22,889 por ejemplo, el cascabel puede ser 223 00:09:22,889 --> 00:09:23,629 que si 224 00:09:23,629 --> 00:09:26,389 tú cambias el ID de la sede 225 00:09:26,389 --> 00:09:27,750 ese cambio en todos los abanicos 226 00:09:27,750 --> 00:09:30,690 tú nunca cambiarías una idea de una sede 227 00:09:30,690 --> 00:09:31,169 jamás 228 00:09:31,169 --> 00:09:33,389 por ejemplo poner un mes así 229 00:09:33,389 --> 00:09:35,009 pues un ejemplo horrible 230 00:09:35,009 --> 00:09:37,610 nunca toques claves primarias, por dios 231 00:09:37,610 --> 00:09:38,730 nunca 232 00:09:38,730 --> 00:09:40,690 pues cambias una 233 00:09:40,690 --> 00:09:44,149 segundo de la sede 234 00:09:44,149 --> 00:09:46,210 no, si no, a ver no 235 00:09:46,210 --> 00:09:48,129 si tú cambias algo de la sede, cambia algo de la sede 236 00:09:48,129 --> 00:09:50,509 vamos a, si tú eliminas 237 00:09:50,509 --> 00:09:52,889 la sede, pues eliminas todos los departamentos 238 00:09:52,889 --> 00:09:53,610 que cuelgan de ella 239 00:09:53,610 --> 00:09:56,289 haces persistente una sede, pues haces 240 00:09:56,289 --> 00:09:58,330 persistente también en todos los departamentos 241 00:09:58,330 --> 00:10:00,250 que colgan de ella, eso es lo que significa 242 00:10:00,250 --> 00:10:01,850 pero bueno, no te enredes mucho en ello tampoco 243 00:10:01,850 --> 00:10:04,429 pero, pero entendida 244 00:10:04,429 --> 00:10:05,049 la idea, ¿no? 245 00:10:09,759 --> 00:10:11,039 vale, pues estas 246 00:10:11,039 --> 00:10:13,220 dos estarían y ya no hay más anotaciones en sede 247 00:10:13,220 --> 00:10:14,960 entonces vamos a las 248 00:10:14,960 --> 00:10:16,980 otras sencillitas que serían 249 00:10:16,980 --> 00:10:18,899 departamento lo mismo, no tiene 250 00:10:18,899 --> 00:10:20,940 nada distinto, clave 251 00:10:20,940 --> 00:10:22,820 primaria, entonces 252 00:10:22,820 --> 00:10:25,019 departamento es el otro extremo de la sede 253 00:10:25,019 --> 00:10:26,480 por eso tiene el many to one 254 00:10:26,480 --> 00:10:28,860 ¿vale? entonces como tiene el many to one 255 00:10:28,860 --> 00:10:30,700 el many to one tiene que tener 256 00:10:30,700 --> 00:10:31,840 ahí así el join column 257 00:10:31,840 --> 00:10:34,480 que diga cuál es el campo de la tabla 258 00:10:34,480 --> 00:10:35,879 que ejerce de clave ajena 259 00:10:35,879 --> 00:10:37,080 ¿vale? 260 00:10:39,399 --> 00:10:40,320 que si 261 00:10:40,320 --> 00:10:42,860 un many to one es el extremo 262 00:10:42,860 --> 00:10:43,679 de un one to many 263 00:10:43,679 --> 00:10:45,240 entonces 264 00:10:45,240 --> 00:10:48,460 aquí sí que tiene 265 00:10:48,460 --> 00:10:50,639 que acompañar ya la información 266 00:10:50,639 --> 00:10:52,700 de cuál es el campo clave ajena 267 00:10:52,700 --> 00:10:53,279 de la tabla 268 00:10:53,279 --> 00:10:58,779 no, no, lo puedes poner en el getter 269 00:10:58,779 --> 00:11:00,059 Todo esto lo puedes poner en el getter 270 00:11:00,059 --> 00:11:01,200 ¿Vale? 271 00:11:01,600 --> 00:11:04,320 Sí, lo puedes poner en el getter 272 00:11:04,320 --> 00:11:05,059 Vale 273 00:11:05,059 --> 00:11:08,220 Entonces aquí ese es el campo clave ajena 274 00:11:08,220 --> 00:11:09,740 Y luego está 275 00:11:09,740 --> 00:11:11,139 La que sí que 276 00:11:11,139 --> 00:11:14,240 Tiene un poco más de trascendencia 277 00:11:14,240 --> 00:11:16,820 Y nos hemos enfrentado un poquito más a ella 278 00:11:16,820 --> 00:11:18,039 Siempre que tenemos 279 00:11:18,039 --> 00:11:20,559 Un objeto o una colección 280 00:11:20,559 --> 00:11:22,940 Que se carga a través de un join 281 00:11:22,940 --> 00:11:25,000 Que esta se va a cargar a través de un join 282 00:11:25,000 --> 00:11:26,519 Porque viene con una clave ajena 283 00:11:26,519 --> 00:11:28,480 Pues o lazy o eager 284 00:11:28,480 --> 00:11:31,759 ¿Dejamos la opción por defecto? 285 00:11:31,919 --> 00:11:33,659 Pues en esta por defecto es el líder 286 00:11:33,659 --> 00:11:36,120 Cuando tenemos una colección 287 00:11:36,120 --> 00:11:37,019 Por defecto es Lazy 288 00:11:37,019 --> 00:11:38,200 ¿Vale? 289 00:11:38,539 --> 00:11:41,659 ¿Que queremos ponerla específica Lazy? 290 00:11:41,779 --> 00:11:42,899 Pues lo ponemos, que no nada 291 00:11:42,899 --> 00:11:44,580 Aquí por ejemplo en sede 292 00:11:44,580 --> 00:11:46,899 No se la hemos puesto 293 00:11:46,899 --> 00:11:49,100 Porque por defecto ya es Lazy, ¿verdad? 294 00:11:53,639 --> 00:11:55,039 Sí, un HASHET 295 00:11:55,039 --> 00:11:56,919 ¿Vale? Que he implementado ya 296 00:11:56,919 --> 00:11:59,360 He implementado ya, podrían haberlo puesto 297 00:11:59,360 --> 00:12:00,620 Y no pasa nada, todo funciona 298 00:12:00,620 --> 00:12:02,360 pero bueno, lo he puesto 299 00:12:02,360 --> 00:12:04,519 para asegurarme 300 00:12:04,519 --> 00:12:06,259 de que no va a haber null pointer exception extraños 301 00:12:06,259 --> 00:12:06,639 por ahí 302 00:12:06,639 --> 00:12:10,080 pero claro, todo tiene su precio 303 00:12:10,080 --> 00:12:12,879 en realidad, todo tiene su coste 304 00:12:12,879 --> 00:12:14,259 por la tranquilidad 305 00:12:14,259 --> 00:12:15,700 de no haber un null pointer exception 306 00:12:15,700 --> 00:12:17,340 pero ¿qué coste? 307 00:12:18,679 --> 00:12:20,440 comprometer la implementación 308 00:12:20,440 --> 00:12:22,019 ¿vale? comprometerla 309 00:12:22,019 --> 00:12:23,639 ¿vela? vale 310 00:12:23,639 --> 00:12:25,320 cuando es una colección entonces 311 00:12:25,320 --> 00:12:26,559 por efecto es lazy 312 00:12:26,559 --> 00:12:29,759 cuando es una colección por efecto es lazy 313 00:12:29,759 --> 00:12:33,840 Cuando es un único objeto, porque es el many to one, por defecto es eager, ¿vale? 314 00:12:34,360 --> 00:12:37,899 Bueno, pues entonces departamento, pues estas de aquí, que no tienen nada. 315 00:12:38,720 --> 00:12:42,639 Departamento a su vez tiene lista de empleados, one to many, todo igual, ya está. 316 00:12:43,059 --> 00:12:43,919 Aquí empleado. 317 00:12:46,259 --> 00:12:49,259 Empleado, pues nada, empleado no tiene nada. 318 00:12:50,220 --> 00:12:57,480 Muchos departamentos, perdón, un empleado, un departamento, por eso este es el extremo many to one, 319 00:12:57,480 --> 00:13:00,539 con la columna y de departamento, esta no tiene nada raro 320 00:13:00,539 --> 00:13:05,179 y ahora ya la relación esta, que esta es la más rara 321 00:13:05,179 --> 00:13:09,039 de mapear, la relación de muchos a muchos 322 00:13:09,039 --> 00:13:13,600 que es esta de aquí, la relación de muchos 323 00:13:13,600 --> 00:13:17,220 a muchos es la de estas tres tablas, ¿vale? 324 00:13:18,720 --> 00:13:21,820 Entonces, la relación de muchos a muchos 325 00:13:21,820 --> 00:13:25,639 en SQL ya sabéis que es a través 326 00:13:25,639 --> 00:13:27,100 de una tabla aparte 327 00:13:27,100 --> 00:13:29,399 pero puede ocurrir 328 00:13:29,399 --> 00:13:31,679 que no haya información 329 00:13:31,679 --> 00:13:33,600 más allá de la relación 330 00:13:33,600 --> 00:13:34,879 que no la haya 331 00:13:34,879 --> 00:13:37,740 no es el caso de este 332 00:13:37,740 --> 00:13:39,179 entonces 333 00:13:39,179 --> 00:13:41,240 cuando no es el caso 334 00:13:41,240 --> 00:13:43,419 es decir, cuando sí que hay 335 00:13:43,419 --> 00:13:45,480 cuando sí que hay 336 00:13:45,480 --> 00:13:47,000 propiedades 337 00:13:47,000 --> 00:13:49,639 que caracterizan a la relación 338 00:13:49,639 --> 00:13:50,220 en sí 339 00:13:50,220 --> 00:13:53,740 necesitamos una entidad específica 340 00:13:53,740 --> 00:13:54,539 para esta tabla 341 00:13:54,539 --> 00:13:56,779 porque en esa entidad es donde irán 342 00:13:56,779 --> 00:13:59,159 estas propiedades, necesitamos una entidad específica 343 00:13:59,159 --> 00:14:01,100 ¿vale? que es el modelo que está aquí 344 00:14:01,100 --> 00:14:02,720 ahora miramos un poquito 345 00:14:02,720 --> 00:14:04,759 pues como sería si no 346 00:14:04,759 --> 00:14:06,840 tuviéramos esto, que se simplifica mucho el modelo 347 00:14:06,840 --> 00:14:08,799 se simplifica mucho, que es el many to many 348 00:14:08,799 --> 00:14:10,659 que dices tú, vale 349 00:14:10,659 --> 00:14:12,779 pues entonces, al haber una entidad 350 00:14:12,779 --> 00:14:15,000 intermedia, ese many to many 351 00:14:15,000 --> 00:14:16,240 en realidad se ha convertido 352 00:14:16,240 --> 00:14:17,980 en dos one to many 353 00:14:17,980 --> 00:14:20,879 ¿vale? dos one to many 354 00:14:20,879 --> 00:14:23,379 que... claro, entonces 355 00:14:23,379 --> 00:14:41,159 Entonces vemos esta situación, pues tiene que haber una entidad proyecto sede, entonces proyecto sede que tiene dos claves, una clave primaria compuesta, entonces proyecto sede es esta. 356 00:14:41,159 --> 00:14:43,960 entonces proyecto sede 357 00:14:43,960 --> 00:14:45,100 tiene 358 00:14:45,100 --> 00:14:48,039 un proyecto por un lado 359 00:14:48,039 --> 00:14:50,519 y otra sede por otro 360 00:14:50,519 --> 00:14:52,740 que son los extremos 361 00:14:52,740 --> 00:14:53,960 many to one 362 00:14:53,960 --> 00:14:56,059 de las dos relaciones 363 00:14:56,059 --> 00:14:57,080 de uno a muchos 364 00:14:57,080 --> 00:14:59,240 de las dos relaciones de uno a muchos 365 00:14:59,240 --> 00:15:00,639 los extremos many to one 366 00:15:00,639 --> 00:15:04,399 al ser los extremos many to one 367 00:15:04,399 --> 00:15:06,360 de esa relación tienen que tener la columna 368 00:15:06,360 --> 00:15:07,399 que los une 369 00:15:07,399 --> 00:15:10,059 que está clara y de prot y de sede 370 00:15:10,059 --> 00:15:30,220 que sería esta, y de proyecto y de sede, estos dos, pues son estos dos de aquí, este y este, vale, entonces, esto lo dejamos aparcado, ahora un momentito, este MAPSID y este MAPSID, pero las dos primeras líneas estarían claras, vale, 371 00:15:30,220 --> 00:15:33,600 toda entidad 372 00:15:33,600 --> 00:15:35,779 JPA tiene que tener una clave primaria 373 00:15:35,779 --> 00:15:37,279 sí o sí obligatoria 374 00:15:37,279 --> 00:15:39,240 bueno, pues en realidad 375 00:15:39,240 --> 00:15:41,940 podríamos, opción sencilla 376 00:15:41,940 --> 00:15:43,539 pero que en 377 00:15:43,539 --> 00:15:45,720 proyectos muy complicados con muchas cosas 378 00:15:45,720 --> 00:15:47,740 que le haces, puede acabar 379 00:15:47,740 --> 00:15:49,600 dando terrores e historias chungas 380 00:15:49,600 --> 00:15:51,580 pero se podría, y en la mayoría 381 00:15:51,580 --> 00:15:52,659 de los contextos funciona 382 00:15:52,659 --> 00:15:54,519 pasar de esto 383 00:15:54,519 --> 00:15:56,379 ID e ID 384 00:15:56,379 --> 00:15:59,440 y tirando, y ya está y no pasa nada 385 00:15:59,440 --> 00:16:01,259 A JPA, de hecho lo hemos hecho así 386 00:16:01,259 --> 00:16:02,919 ¿Vale? Y a JPA 387 00:16:02,919 --> 00:16:05,340 Pues le parece estupendo 388 00:16:05,340 --> 00:16:06,559 Bueno, no sé lo que le parece 389 00:16:06,559 --> 00:16:08,700 Porque no es humano por ahora 390 00:16:08,700 --> 00:16:10,419 Pero ya está, tiras 391 00:16:10,419 --> 00:16:11,919 La mayoría de los casos tira 392 00:16:11,919 --> 00:16:13,940 ¿Vale? Pero 393 00:16:13,940 --> 00:16:17,639 No, no tiene nada que ver con eso 394 00:16:17,639 --> 00:16:18,919 Pero 395 00:16:18,919 --> 00:16:21,120 Es mucho más recomendable 396 00:16:21,120 --> 00:16:23,580 Que la clave primaria esté en un único campo 397 00:16:23,580 --> 00:16:25,940 ¿Vale? Para asegurar el manejo 398 00:16:25,940 --> 00:16:26,919 De esas entidades 399 00:16:26,919 --> 00:16:28,600 No a través de dos propiedades 400 00:16:28,600 --> 00:16:29,539 A través solo de una 401 00:16:29,539 --> 00:16:30,539 Para ciertas situaciones 402 00:16:30,539 --> 00:16:33,000 De hecho, te puede dar hasta error 403 00:16:33,000 --> 00:16:35,299 Bueno, pues si queremos que la clave primaria 404 00:16:35,299 --> 00:16:36,460 Esté en un solo campo 405 00:16:36,460 --> 00:16:38,059 Vamos a hacer una ID 406 00:16:38,059 --> 00:16:39,279 ¿De qué tipo? 407 00:16:39,519 --> 00:16:40,580 Tiene que tener dos cosas 408 00:16:40,580 --> 00:16:41,519 Pues no me queda más remedio 409 00:16:41,519 --> 00:16:42,580 Que hacer una clase aparte 410 00:16:42,580 --> 00:16:43,779 Para que tenga esas dos cosas 411 00:16:43,779 --> 00:16:45,559 Vale, pues entonces 412 00:16:45,559 --> 00:16:47,659 Este es un tipo clave 413 00:16:47,659 --> 00:16:48,779 Que nos tenemos que hacer 414 00:16:48,779 --> 00:16:50,360 No nos queda más remedio que hacerlo 415 00:16:50,360 --> 00:16:51,799 Un tipo clave que nos tenemos que hacer 416 00:16:51,799 --> 00:16:52,840 Porque contiene dos cosas 417 00:16:52,840 --> 00:16:55,019 Pues ese tipo clave sería este 418 00:16:55,019 --> 00:16:57,039 y este tipo clave tiene 419 00:16:57,039 --> 00:16:58,779 su 420 00:16:58,779 --> 00:17:00,159 y de proyecto 421 00:17:00,159 --> 00:17:03,220 las dos claves, los dos enteros 422 00:17:03,220 --> 00:17:05,619 este y este, que hay que decirle 423 00:17:05,619 --> 00:17:06,880 como he cambiado el nombre 424 00:17:06,880 --> 00:17:09,579 hay que ponérselo aquí porque he cambiado el nombre 425 00:17:09,579 --> 00:17:11,160 si no este column no haría ni falta 426 00:17:11,160 --> 00:17:13,319 ¿vale? entonces un segundinín 427 00:17:13,319 --> 00:17:14,579 este tipo clave 428 00:17:14,579 --> 00:17:17,039 no necesita anotarle nada más 429 00:17:17,039 --> 00:17:18,119 ni hacerle nada más 430 00:17:18,119 --> 00:17:21,440 pero resulta que como este tipo clave 431 00:17:21,440 --> 00:17:23,119 va a formar, va a ser 432 00:17:23,119 --> 00:17:25,160 la clave primaria de otra 433 00:17:25,160 --> 00:17:26,819 entidad 434 00:17:26,819 --> 00:17:29,380 para que JPA lo entienda 435 00:17:29,380 --> 00:17:31,200 hay que poner esta 436 00:17:31,200 --> 00:17:33,359 anotación, ya está, aunque nos quedemos con eso 437 00:17:33,359 --> 00:17:35,240 suficiente, hay que poner esta 438 00:17:35,240 --> 00:17:37,059 anotación, pues se planta esta anotación 439 00:17:37,059 --> 00:17:39,160 y ahora en proyecto sede 440 00:17:39,160 --> 00:17:40,559 yo digo, ojo 441 00:17:40,559 --> 00:17:43,339 que esta es de una entidad 442 00:17:43,339 --> 00:17:45,480 embedable, es una clave primaria 443 00:17:45,480 --> 00:17:47,339 embebida, aquí metida 444 00:17:47,339 --> 00:17:48,940 en todo esto, vale 445 00:17:48,940 --> 00:17:50,859 y ahora vamos con esto 446 00:17:50,859 --> 00:17:52,039 dime 447 00:17:52,039 --> 00:18:08,420 ¿Por qué le pones luego también 448 00:18:08,420 --> 00:18:09,960 id proyecto y id sea a la otra clase 449 00:18:09,960 --> 00:18:11,339 si ya lo tienes dentro de la id? 450 00:18:12,640 --> 00:18:14,660 No se lo he puesto, le he puesto el propio objeto 451 00:18:14,660 --> 00:18:16,559 Claro, le he puesto el objeto para que tenga 452 00:18:16,559 --> 00:18:18,900 todos los datos, esto es para poner una clave 453 00:18:18,900 --> 00:18:20,140 Es que 454 00:18:20,140 --> 00:18:23,759 donde tienen que estar los objetos 455 00:18:23,759 --> 00:18:27,640 por pura semántica es aquí, en la relación proyecto-sede 456 00:18:27,640 --> 00:18:30,460 tienen que estar aquí, entonces esto es solo para la clave 457 00:18:30,460 --> 00:18:33,759 entonces la clave en cualquier otra entidad 458 00:18:33,759 --> 00:18:35,960 siempre es el tipo de dato, ¿qué es un entero? 459 00:18:36,079 --> 00:18:39,599 pues es un entero, es decir, tú aquí en id-sede no te has planteado 460 00:18:39,599 --> 00:18:41,480 decir esto que sea de tipo sede 461 00:18:41,480 --> 00:18:45,339 tú ahí tienes la información de la clave porque tiras de ella para búsquedas 462 00:18:45,339 --> 00:18:47,579 para lo que sea, pues aquí igual 463 00:18:47,579 --> 00:18:49,960 proyecto sede 464 00:18:49,960 --> 00:18:51,980 esta es 465 00:18:51,980 --> 00:18:53,940 la clave, entonces tú quieres los valores 466 00:18:53,940 --> 00:18:56,180 de la clave, no pienses que como son dos 467 00:18:56,180 --> 00:18:58,140 los hemos metido en otro sitio, pero tienen que ser 468 00:18:58,140 --> 00:19:00,079 los propios valores de la clave, luego ya los datos 469 00:19:00,079 --> 00:19:01,759 los datos ya van ahí 470 00:19:01,759 --> 00:19:02,960 los datos ya van ahí 471 00:19:02,960 --> 00:19:05,339 y luego también 472 00:19:05,339 --> 00:19:07,180 hace falta un hipo, es un fast food 473 00:19:07,180 --> 00:19:09,160 porque no hay hipo 474 00:19:09,160 --> 00:19:11,720 claro, pero porque he puesto sets 475 00:19:11,720 --> 00:19:14,079 he hecho que las colecciones 476 00:19:14,079 --> 00:19:14,779 fueran hard set 477 00:19:14,779 --> 00:19:16,059 la clase de líder 478 00:19:16,059 --> 00:19:17,259 Ah 479 00:19:17,259 --> 00:19:19,539 En la clase del ID 480 00:19:19,539 --> 00:19:23,500 Por amas ID sería 481 00:19:23,500 --> 00:19:31,059 Yo lo pongo 482 00:19:31,059 --> 00:19:32,339 ¿Dónde está? 483 00:19:32,339 --> 00:19:32,859 Aquí está 484 00:19:32,859 --> 00:19:36,720 Siempre es recomendable 485 00:19:36,720 --> 00:19:38,680 En cualquier entidad ponerlo 486 00:19:38,680 --> 00:19:40,619 Los dos, jasco de equals 487 00:19:40,619 --> 00:19:42,299 Porque es que si no nunca sabes 488 00:19:42,299 --> 00:19:43,700 Cuando va a petar por ahí 489 00:19:43,700 --> 00:19:44,859 ¿Y en proyectos? 490 00:19:44,859 --> 00:19:53,059 En proyecto sede tengo, claro, de la ID. 491 00:19:53,319 --> 00:19:54,319 Todos por clave primaria. 492 00:19:54,720 --> 00:19:55,200 ¿Vale? 493 00:19:58,759 --> 00:20:02,339 Bueno, esto en cuanto a la clave. 494 00:20:02,859 --> 00:20:05,319 Y ahora, nosotros ya podríamos tirar con esto. 495 00:20:06,180 --> 00:20:08,200 Imaginaos que nos olvidamos de este maps ID. 496 00:20:09,839 --> 00:20:12,140 O sea, lo de que la clave sean dos parámetros. 497 00:20:12,359 --> 00:20:14,640 Por tanto, sea un tipo que nos hemos hecho nuevo. 498 00:20:14,859 --> 00:20:16,460 que ese tipo tenga que tener el 499 00:20:16,460 --> 00:20:18,579 embedable y aquí decirle que es en bebidas 500 00:20:18,579 --> 00:20:20,400 o ya está, es que es eso, es sota caballo y rey 501 00:20:20,400 --> 00:20:21,779 ya está, no hace falta saber más que eso 502 00:20:21,779 --> 00:20:24,559 ahora, lo único es que aquí 503 00:20:24,559 --> 00:20:25,160 JPA 504 00:20:25,160 --> 00:20:28,160 luego se puede volver un poco loco 505 00:20:28,160 --> 00:20:30,420 si no ponemos este mapsid 506 00:20:30,420 --> 00:20:34,259 si no ponemos este mapsid 507 00:20:34,259 --> 00:20:36,400 pero porque se vuelve un poco loco 508 00:20:36,400 --> 00:20:38,339 porque ve que tiene 509 00:20:38,339 --> 00:20:40,559 una información en dos sitios, duplicada 510 00:20:40,559 --> 00:20:42,299 ve que tiene aquí 511 00:20:42,299 --> 00:20:44,299 y de proyecto 512 00:20:44,299 --> 00:20:46,539 ID sede y luego la tiene 513 00:20:46,539 --> 00:20:47,759 aquí dentro también 514 00:20:47,759 --> 00:20:49,640 entonces 515 00:20:49,640 --> 00:20:52,539 para decirle 516 00:20:52,539 --> 00:20:54,420 a JPA, son siempre la misma 517 00:20:54,420 --> 00:20:56,579 cuidado, no te estoy dando la clave 518 00:20:56,579 --> 00:20:57,819 primaria dos veces 519 00:20:57,819 --> 00:21:00,220 aunque tengas dos ID pro 520 00:21:00,220 --> 00:21:02,859 son el mismo, no te líes 521 00:21:02,859 --> 00:21:04,599 le ponemos el maps, que le decimos 522 00:21:04,599 --> 00:21:05,460 oye, esta sede 523 00:21:05,460 --> 00:21:08,519 de aquí, su ID de sede 524 00:21:08,519 --> 00:21:10,380 no es un ID de sede que 525 00:21:10,380 --> 00:21:12,799 pueda ser otro diferente a este 526 00:21:12,799 --> 00:21:13,779 que pueda ser otro 527 00:21:13,779 --> 00:21:15,940 es como si tuviera dos referencias 528 00:21:15,940 --> 00:21:17,960 que se llamaran IDS 529 00:21:17,960 --> 00:21:18,940 JPA dice 530 00:21:18,940 --> 00:21:21,200 tengo dos cosas que se llaman IDS 531 00:21:21,200 --> 00:21:22,839 lo que está aquí dentro 532 00:21:22,839 --> 00:21:24,740 y lo que está aquí dentro 533 00:21:24,740 --> 00:21:26,759 y tengo dos cosas que se llaman IDPROJ 534 00:21:26,759 --> 00:21:29,500 el que está aquí dentro y el que está aquí dentro 535 00:21:29,500 --> 00:21:31,220 entonces 536 00:21:31,220 --> 00:21:32,460 pues 537 00:21:32,460 --> 00:21:34,599 dos cosas que se llaman igual 538 00:21:34,599 --> 00:21:37,519 no me mola, no me gusta 539 00:21:37,519 --> 00:21:38,240 entonces 540 00:21:38,240 --> 00:21:40,160 si no le ponemos esto 541 00:21:40,160 --> 00:21:42,039 nos peta y le decimos 542 00:21:42,039 --> 00:21:45,259 Cuidado que están perfectamente conectados 543 00:21:45,259 --> 00:21:46,779 Este idprox 544 00:21:46,779 --> 00:21:48,160 Arrastra siempre 545 00:21:48,160 --> 00:21:49,440 Al de aquí 546 00:21:49,440 --> 00:21:52,380 Y este idcd arrastra siempre 547 00:21:52,380 --> 00:21:53,480 Al de ahí, ya está 548 00:21:53,480 --> 00:21:55,839 Con esas notaciones estaríamos 549 00:21:55,839 --> 00:21:57,799 Si arrastra al de ahí 550 00:21:57,799 --> 00:21:59,700 ¿Por qué lo llamo idcd en el map? 551 00:22:00,339 --> 00:22:03,079 Porque se llama idcd aquí 552 00:22:03,079 --> 00:22:04,680 Ahí 553 00:22:04,680 --> 00:22:08,940 Exacto 554 00:22:08,940 --> 00:22:10,440 ¿Y te lo mapea con el 555 00:22:10,440 --> 00:22:21,720 No te entiendo 556 00:22:21,720 --> 00:22:25,700 Sí, lo que le estoy diciendo 557 00:22:25,700 --> 00:22:27,500 Es que esta ID de aquí 558 00:22:27,500 --> 00:22:29,400 O sea, la ID de aquí 559 00:22:29,400 --> 00:22:32,099 Es el mismo campo 560 00:22:32,099 --> 00:22:33,859 ID prot que está aquí dentro 561 00:22:33,859 --> 00:22:35,079 Que se refiere al mismo 562 00:22:35,079 --> 00:22:40,400 Bueno, no te lo sobreentiendes 563 00:22:40,400 --> 00:22:41,539 Si tú no le pones 564 00:22:41,539 --> 00:22:44,500 o sea, en el momento 565 00:22:44,500 --> 00:22:46,240 de hacer un get proyecto sede 566 00:22:46,240 --> 00:22:48,200 sí, en el momento de hacer un get 567 00:22:48,200 --> 00:22:50,259 proyecto sede, de hacer 568 00:22:50,259 --> 00:22:51,700 un get con JPA 569 00:22:51,700 --> 00:22:54,339 él al hacer el get ya te lo mapea y te lo hace todo 570 00:22:54,339 --> 00:22:56,420 pero luego, pero ¿cuál es el 571 00:22:56,420 --> 00:22:58,079 problema? que ese objeto se queda con 572 00:22:58,079 --> 00:23:00,519 una información en dos sitios 573 00:23:00,519 --> 00:23:02,359 guardada, una vez que ya está 574 00:23:02,359 --> 00:23:04,339 mapeado, el problema no es hacer el get, ahí no hay 575 00:23:04,339 --> 00:23:06,259 problema, el problema es que él se queda con la 576 00:23:06,259 --> 00:23:08,220 información guardada en dos sitios, la misma 577 00:23:08,220 --> 00:23:10,500 aquí dentro y aquí dentro 578 00:23:10,500 --> 00:23:12,559 entonces le indicamos 579 00:23:12,559 --> 00:23:14,720 que esa es la misma, nos referimos a la misma 580 00:23:14,720 --> 00:23:16,680 que no tiene dos propiedades idprox 581 00:23:16,680 --> 00:23:18,319 nos referimos a eso simplemente 582 00:23:18,319 --> 00:23:20,279 porque te obliga 583 00:23:20,279 --> 00:23:22,359 si es que no sé mucho más que esto que te estoy diciendo 584 00:23:22,359 --> 00:23:38,480 claro, tú al poner aquí 585 00:23:38,480 --> 00:23:40,140 maps id, él dice 586 00:23:40,140 --> 00:23:42,299 ah, vale, que esto en la clave 587 00:23:42,299 --> 00:23:44,440 también lo tengo, y ah, que lo tengo 588 00:23:44,440 --> 00:23:46,319 duplicado, dice, ah, vale 589 00:23:46,319 --> 00:23:47,680 o sea, que esta es una dúplica 590 00:23:47,680 --> 00:23:50,460 y se va a la clave y dice, ¿es una dúplica de quién? 591 00:23:50,599 --> 00:23:50,779 de este 592 00:23:50,779 --> 00:23:52,839 ¿vale? 593 00:23:53,279 --> 00:23:56,279 el error sería, o sea 594 00:23:56,279 --> 00:23:58,400 la idea del error es como si tú declaras 595 00:23:58,400 --> 00:24:00,339 una variable dos veces, si no pones 596 00:24:00,339 --> 00:24:02,339 maps id, sería como declarar 597 00:24:02,339 --> 00:24:04,019 algo dos veces, que Java no te deja 598 00:24:04,019 --> 00:24:05,740 ¿vale? pues es la idea 599 00:24:05,740 --> 00:24:08,380 vale, entonces, ahora, antes 600 00:24:08,380 --> 00:24:09,539 de irnos al recreo 601 00:24:09,539 --> 00:24:11,539 ¿qué ocurriría 602 00:24:11,539 --> 00:24:14,200 si aquí, 603 00:24:15,819 --> 00:24:16,440 esperemos, 604 00:24:16,759 --> 00:24:16,960 dime, 605 00:24:16,960 --> 00:24:20,619 sobre el código este? 606 00:24:21,259 --> 00:24:21,819 Sí. 607 00:24:24,759 --> 00:24:26,359 Ah, ahora cuando paremos, ¿vale? 608 00:24:26,440 --> 00:24:28,380 Digo esto y, vale. 609 00:24:28,559 --> 00:24:30,319 Entonces, ¿qué ocurre 610 00:24:30,319 --> 00:24:32,759 si esto no tiene estas dos 611 00:24:32,759 --> 00:24:33,200 de aquí? 612 00:24:34,279 --> 00:24:36,619 Si no tiene estas dos, ¿vale? 613 00:24:36,980 --> 00:24:38,839 No hace falta proyecto 614 00:24:38,839 --> 00:25:00,220 No hace falta. El modelo sería más fácil. Sede tendría list proyecto, punto pelota. Y proyecto tendría list sede, punto pelota. ¿Qué cambian? Las anotaciones. Ahora, en ambas listas, en ambos lados, tendría que haber un many to many en los dos. 615 00:25:00,220 --> 00:25:02,319 many to many, y ahora en uno 616 00:25:02,319 --> 00:25:03,960 de los dos, solo en uno 617 00:25:03,960 --> 00:25:06,220 ¿en cuál? en el que queramos 618 00:25:06,220 --> 00:25:07,700 ahí sí que podemos elegir 619 00:25:07,700 --> 00:25:10,240 solo en uno de los dos, ahora ya sí habría 620 00:25:10,240 --> 00:25:10,940 que mapear 621 00:25:10,940 --> 00:25:13,279 cuáles son las dos claves 622 00:25:13,279 --> 00:25:15,000 ajenas 623 00:25:15,000 --> 00:25:17,799 ¿vale? entonces quedaría algo como esto 624 00:25:17,799 --> 00:25:18,740 ¿la tabla seguirá viendo? 625 00:25:19,259 --> 00:25:21,140 no, esta no, la tabla sí, claro 626 00:25:21,140 --> 00:25:22,799 lo que no existe es la entidad 627 00:25:22,799 --> 00:25:24,079 entonces 628 00:25:24,079 --> 00:25:28,220 nos quedaría 629 00:25:28,220 --> 00:25:29,460 una notación tipo esta 630 00:25:29,460 --> 00:25:33,089 Ejemplo 631 00:25:33,089 --> 00:25:34,650 No, eso no lo voy a poner en el examen 632 00:25:34,650 --> 00:25:35,730 Porque no hemos hecho ningún ejemplo 633 00:25:35,730 --> 00:25:38,029 Joder, mayúsculas no, que se cree que estoy enfadada 634 00:25:38,029 --> 00:25:40,690 Ejemplo 635 00:25:40,690 --> 00:25:46,849 No, no es un tochaco 636 00:25:46,849 --> 00:25:47,630 En realidad son 637 00:25:47,630 --> 00:25:50,450 Yo, el referes y el inverse 638 00:25:50,450 --> 00:25:52,470 Tú tienes que poner dos campos 639 00:25:52,470 --> 00:25:54,430 El inverse y el otro, y ya está 640 00:25:54,430 --> 00:25:55,690 Nada más, y la tabla 641 00:25:55,690 --> 00:25:58,269 Tienes que poner la tabla y las dos columnas 642 00:25:58,269 --> 00:25:59,109 No tienes que poner más 643 00:25:59,109 --> 00:26:03,609 puede ser 644 00:26:03,609 --> 00:26:06,950 pero vale, entonces vámonos directamente a la anotación 645 00:26:06,950 --> 00:26:09,589 vale, ya está, es esta, no tiene más 646 00:26:09,589 --> 00:26:12,230 entonces esto sería, por ejemplo 647 00:26:12,230 --> 00:26:15,789 estudiante cursos, un estudiante muchos cursos 648 00:26:15,789 --> 00:26:18,509 un curso muchos estudiantes, una many to many 649 00:26:18,509 --> 00:26:21,509 entonces, estudiante tendría 650 00:26:21,509 --> 00:26:24,069 ¿dónde estamos? estudiante tiene 651 00:26:24,069 --> 00:26:26,329 por tanto muchos cursos 652 00:26:26,329 --> 00:26:28,690 y curso tendría que estar 653 00:26:28,690 --> 00:26:30,130 por abajo muchos estudiantes 654 00:26:30,130 --> 00:26:32,069 entonces la tabla estudiante 655 00:26:32,069 --> 00:26:34,670 la entidad estudiante curso no existe, esa no existe 656 00:26:34,670 --> 00:26:36,130 entonces aquí 657 00:26:36,130 --> 00:26:38,410 anotamos que esto es un 658 00:26:38,410 --> 00:26:39,069 many to many 659 00:26:39,069 --> 00:26:41,769 que es un many to many 660 00:26:41,769 --> 00:26:44,329 y ahora ya hay que decir simplemente 661 00:26:44,329 --> 00:26:46,490 tabla que tiene 662 00:26:46,490 --> 00:26:48,369 la relación, tabla, que la tabla 663 00:26:48,369 --> 00:26:49,529 sí existe lógicamente 664 00:26:49,529 --> 00:26:51,250 y las dos columnas 665 00:26:51,250 --> 00:26:54,430 esta que sería la columna 666 00:26:54,430 --> 00:26:55,390 la que pones aquí 667 00:26:55,390 --> 00:26:58,130 es la columna, la clave ajena 668 00:26:58,130 --> 00:26:59,549 de la tabla en la que estás 669 00:26:59,549 --> 00:27:02,170 de estudiante, ahora estamos en estudiante 670 00:27:02,170 --> 00:27:04,390 y la que pones en inverse 671 00:27:04,390 --> 00:27:06,150 es la clave ajena referencia 672 00:27:06,150 --> 00:27:08,349 al otro extremo, a curso 673 00:27:08,349 --> 00:27:10,150 y ya está, con poner esto 674 00:27:10,150 --> 00:27:12,130 luego tienes más propiedades que podrías poner 675 00:27:12,130 --> 00:27:14,369 de fetch 676 00:27:14,369 --> 00:27:16,230 de no sé qué, pero esto es lo básico 677 00:27:16,230 --> 00:27:30,569 No, no, no, estás haciendo referencia al tuyo, estás estudiante. 678 00:27:31,569 --> 00:27:39,369 Claro, tú eres estudiante, pero es que, sí, pero, a ver, pero estas son de la tabla estudiante-curso, 679 00:27:39,950 --> 00:27:46,009 entonces esta es, yo como estudiante, ¿cuál es la clave ajena en la que me adhiero? A esta, yo en columna. 680 00:27:46,009 --> 00:27:51,069 Pero es que el otro es el otro para los dos 681 00:27:51,069 --> 00:27:54,289 Porque el otro es la tabla estudiante curso 682 00:27:54,289 --> 00:27:57,630 Tienes estudiante, estudiante curso 683 00:27:57,630 --> 00:27:58,750 Y curso 684 00:27:58,750 --> 00:28:01,670 Vale, pues ya está 685 00:28:01,670 --> 00:28:05,369 Claro, esto es de la tabla intermedia 686 00:28:05,369 --> 00:28:09,009 Y ahora, estudiante 687 00:28:09,009 --> 00:28:10,470 Tendrá un Muppet By 688 00:28:10,470 --> 00:28:13,289 Estudiante, que estará por aquí abajo 689 00:28:13,289 --> 00:28:16,109 Many to Many tiene un map 690 00:28:16,109 --> 00:28:18,349 porque esto ya está mapeado 691 00:28:18,349 --> 00:28:20,230 en la propiedad 692 00:28:20,230 --> 00:28:22,769 cursos de la clase estudiante 693 00:28:22,769 --> 00:28:25,190 lo haces en uno de los dos 694 00:28:25,190 --> 00:28:26,750 ¿en cuál? en el que quieras 695 00:28:26,750 --> 00:28:27,930 pero eso sí 696 00:28:27,930 --> 00:28:29,569 en el que lo hagas 697 00:28:29,569 --> 00:28:31,849 lo has convertido en propietario 698 00:28:31,849 --> 00:28:34,329 ¿qué significa? que en esto que ha hecho 699 00:28:34,329 --> 00:28:36,450 CharGPT, el propietario 700 00:28:36,450 --> 00:28:38,349 es el estudiante 701 00:28:38,349 --> 00:28:40,529 el propietario de la relación, con lo cual el estudiante 702 00:28:40,529 --> 00:28:42,190 a través del estudiante 703 00:28:42,190 --> 00:28:44,349 puedes cambiar los cursos, los datos 704 00:28:44,349 --> 00:28:46,250 de los cursos. Pero a través 705 00:28:46,250 --> 00:28:48,430 de curso no puedes cambiarlos de los estudiantes. 706 00:28:50,170 --> 00:28:52,430 ¿Vale? Porque eso sí que tiene trascendencia. 707 00:28:52,990 --> 00:28:54,250 El que tenga el 708 00:28:54,250 --> 00:28:56,109 joint column y todo esto, 709 00:28:57,250 --> 00:28:58,349 en este caso este, 710 00:28:59,609 --> 00:29:00,450 este a partir 711 00:29:00,450 --> 00:29:02,450 de estudiantes, que tú agregas 712 00:29:02,450 --> 00:29:04,329 un curso, lo puedes hacer sin 713 00:29:04,329 --> 00:29:06,029 ningún problema. Que borras un curso, 714 00:29:06,390 --> 00:29:07,990 lo puedes hacer. JPA te lo hace, 715 00:29:08,210 --> 00:29:09,130 porque estás propietario. 716 00:29:10,190 --> 00:29:12,069 Pero, desde aquí, 717 00:29:12,190 --> 00:29:14,009 desde curso 718 00:29:14,009 --> 00:29:16,150 tú no puedes cargarte un estudiante 719 00:29:16,150 --> 00:29:18,430 no puedes añadir estudiantes 720 00:29:18,430 --> 00:29:20,029 a la colección, quitarlos, no puedes 721 00:29:20,029 --> 00:29:20,630 no te deja 722 00:29:20,630 --> 00:29:23,990 bueno, es que no te deja, tú lo haces pero luego ves que no te lo ha hecho 723 00:29:23,990 --> 00:29:26,170 ¿vale? porque la que manda 724 00:29:26,170 --> 00:29:26,869 es la otra 725 00:29:26,869 --> 00:29:29,710 que tiene sentido 726 00:29:29,710 --> 00:29:32,269 tiene sentido que un estudiante pueda cambiar 727 00:29:32,269 --> 00:29:34,369 sus cursos, pero tiene todo el sentido 728 00:29:34,369 --> 00:29:36,289 del mundo que a través 729 00:29:36,289 --> 00:29:38,190 de un curso tú no puedas eliminar estudiantes 730 00:29:38,190 --> 00:29:40,150 ¿vale? entonces siempre se elige 731 00:29:40,150 --> 00:29:42,150 el propietario con el que 732 00:29:42,150 --> 00:29:43,410 tenga sentido, ¿vale? 733 00:29:47,309 --> 00:29:47,710 No. 734 00:29:49,390 --> 00:29:51,150 Según esto, tú no puedes eliminar 735 00:29:51,150 --> 00:29:52,890 de un curso, no puedes eliminar a un estudiante, 736 00:29:52,970 --> 00:29:55,190 efectivamente. O modificar sus propiedades. 737 00:29:55,990 --> 00:29:57,049 O sea, a través de un curso, esto 738 00:29:57,049 --> 00:29:59,069 sobre todo se ve a través de modificar 739 00:29:59,069 --> 00:30:01,329 por ejemplo, el estudiante tiene una edad. 740 00:30:02,009 --> 00:30:03,250 A través del curso no puedes 741 00:30:03,250 --> 00:30:04,890 cambiar su edad, no te lo va a coger. 742 00:30:05,569 --> 00:30:06,509 Pero el 743 00:30:06,509 --> 00:30:09,089 estudiante tiene un curso. 744 00:30:09,190 --> 00:30:11,089 A través del estudiante puedes cambiar el nombre del curso. 745 00:30:11,089 --> 00:30:12,549 Eso sí podrías, por ejemplo. 746 00:30:13,190 --> 00:30:17,210 Porque el estudiante es el que tiene la propia... 747 00:30:17,210 --> 00:30:21,470 Entonces, a través de aquí tú puedes cambiar de cursos lo que quieras. 748 00:30:21,670 --> 00:30:22,829 Su nombre, lo que te dé la gana. 749 00:30:22,990 --> 00:30:23,410 Pruébalo. 750 00:30:23,630 --> 00:30:23,930 Sí, sí. 751 00:30:27,049 --> 00:30:27,450 Dime. 752 00:30:32,349 --> 00:30:32,750 Justo. 753 00:30:33,410 --> 00:30:34,650 Entonces, no hace falta esa tabla. 754 00:30:36,309 --> 00:30:40,029 Pero si hay propiedades, hace falta, que es lo habitual normalmente. 755 00:30:40,910 --> 00:30:41,309 ¿Vale? 756 00:30:41,309 --> 00:30:43,809 Pero bueno, el many-to-many lo vamos a poner en el examen 757 00:30:43,809 --> 00:30:49,130 No, porque lo hemos mencionado ahora 758 00:30:49,130 --> 00:30:50,490 No hemos hecho ningún ejemplo antes 759 00:30:50,490 --> 00:30:53,190 Si lo he dicho antes 760 00:30:53,190 --> 00:30:55,190 Es que no me escucháis, me escucháis como en zig-zag 761 00:30:55,190 --> 00:30:56,490 O sea, una vez de cada 10 minutos 762 00:30:56,490 --> 00:30:58,710 Al igual que tú, que tenemos que decir la que escucha 763 00:30:58,710 --> 00:31:00,109 Exacto 764 00:31:00,109 --> 00:31:01,670 Es que ni un chico se escucha 765 00:31:01,670 --> 00:31:02,750 ¿Eh? 766 00:31:03,930 --> 00:31:06,349 Hombre, sí, porque de eso sí que es de lo que hemos visto 767 00:31:06,349 --> 00:31:07,690 Ejemplo, ¿vale? 768 00:31:09,710 --> 00:31:10,069 Vale 769 00:31:10,069 --> 00:31:12,710 Ahora miro lo tuyo, Cristina 770 00:31:12,710 --> 00:31:14,410 Venga, pues paramos aquí