1 00:00:00,000 --> 00:00:00,600 de menos 2 00:00:00,600 --> 00:00:03,540 he pensado mucho en vosotros 3 00:00:03,540 --> 00:00:04,179 todo este tiempo 4 00:00:04,179 --> 00:00:06,160 igual que vosotros en mí 5 00:00:06,160 --> 00:00:08,539 hemos pensado mucho en vosotros 6 00:00:08,539 --> 00:00:11,259 venga, tema 3 7 00:00:11,259 --> 00:00:12,599 de nuevo, empezamos 8 00:00:12,599 --> 00:00:15,619 vale, usando el 9 00:00:15,619 --> 00:00:17,339 JDBC, a ver Juana 10 00:00:17,339 --> 00:00:18,120 ¿qué haces? 11 00:00:20,600 --> 00:00:21,719 Karol, perdón 12 00:00:21,719 --> 00:00:23,600 a ver, es que a mí es que me gusta 13 00:00:23,600 --> 00:00:25,760 más su primer nombre, os reconozco 14 00:00:25,760 --> 00:00:28,699 no, no, no 15 00:00:28,699 --> 00:00:31,079 no, es que no sé, me parece más bonito 16 00:00:31,079 --> 00:00:31,559 pero bueno 17 00:00:31,559 --> 00:00:34,060 ¿Carol? 18 00:00:35,640 --> 00:00:36,700 ¿qué hace Carol? 19 00:00:36,799 --> 00:00:38,420 que está ahí tomada, eso era 20 00:00:38,420 --> 00:00:41,299 nada, olvídalo 21 00:00:41,299 --> 00:00:41,719 da igual 22 00:00:41,719 --> 00:00:46,399 imagínate lo concentrada que estaría 23 00:00:46,399 --> 00:00:48,479 bueno, da igual, no pasa nada 24 00:00:48,479 --> 00:00:50,380 a ver 25 00:00:50,380 --> 00:00:52,399 en el tema anterior 26 00:00:52,399 --> 00:00:54,780 ya hemos apuntado 27 00:00:54,780 --> 00:00:55,539 ¿vale? 28 00:00:55,539 --> 00:01:11,799 Que JDBC es potente, pero engorroso, ¿vale? Por capturar todas las excepciones, por mapear las propiedades de objetos en campos de la tabla, por gestionar las conexiones, por todo eso. 29 00:01:11,799 --> 00:01:16,319 Spring JDBC 30 00:01:16,319 --> 00:01:18,760 bueno, nos ha envuelto 31 00:01:18,760 --> 00:01:19,700 ya un poquito 32 00:01:19,700 --> 00:01:21,939 esa complejidad 33 00:01:21,939 --> 00:01:24,840 nos ha ocultado la gestión 34 00:01:24,840 --> 00:01:25,939 de las excepciones 35 00:01:25,939 --> 00:01:28,599 nos ha obligado a hacer un mapper, pero un mapper 36 00:01:28,599 --> 00:01:30,560 muy poco potente, la verdad, lo teníamos que hacer 37 00:01:30,560 --> 00:01:31,519 con una bifunction 38 00:01:31,519 --> 00:01:34,540 y era un poco engorroso, con una bifunction 39 00:01:34,540 --> 00:01:36,640 hacer el mapper, pues era un poco 40 00:01:36,640 --> 00:01:38,659 pesado, entonces 41 00:01:38,659 --> 00:01:41,140 si recordamos 42 00:01:41,140 --> 00:01:43,200 JaxB, JaxB 43 00:01:43,200 --> 00:01:44,760 nos pareció maravilloso 44 00:01:44,760 --> 00:01:47,379 porque también teníamos un problema 45 00:01:47,379 --> 00:01:48,299 similar que era 46 00:01:48,299 --> 00:01:51,739 modelo XML, modelo de clases 47 00:01:51,739 --> 00:01:53,459 necesitábamos 48 00:01:53,459 --> 00:01:54,700 un mapeo entre ambos 49 00:01:54,700 --> 00:01:57,140 poníamos 50 00:01:57,140 --> 00:01:59,200 unas anotaciones en las clases 51 00:01:59,200 --> 00:02:00,900 anotaciones que 52 00:02:00,900 --> 00:02:03,280 expresaban a que 53 00:02:03,280 --> 00:02:05,640 se correspondía cada propiedad en términos 54 00:02:05,640 --> 00:02:07,519 de nodos y a partir 55 00:02:07,519 --> 00:02:09,560 de ahí las librerías 56 00:02:09,560 --> 00:02:11,780 de JAX-B lo hacían todos solas. 57 00:02:12,879 --> 00:02:13,680 Bueno, pues 58 00:02:13,680 --> 00:02:15,560 la idea de los ORM 59 00:02:15,560 --> 00:02:16,180 que son 60 00:02:16,180 --> 00:02:19,500 el mapeo objeto relacional 61 00:02:19,500 --> 00:02:21,500 como bien indica su nombre 62 00:02:21,500 --> 00:02:22,520 ¿vale? 63 00:02:23,000 --> 00:02:36,900 Pues la idea de las herramientas ORM 64 00:02:36,900 --> 00:02:38,460 es exactamente 65 00:02:38,460 --> 00:02:39,900 esa en origen. 66 00:02:41,520 --> 00:02:42,659 Configurar mediante 67 00:02:42,659 --> 00:02:44,680 anotaciones o mediante 68 00:02:44,680 --> 00:02:46,400 XML o de muchas maneras. 69 00:02:46,560 --> 00:02:48,379 Pero esencialmente al final la que sobrevive 70 00:02:48,379 --> 00:02:50,199 y la que más se usa es mediante anotaciones 71 00:02:50,199 --> 00:02:55,699 Configurar mediante anotaciones un mapeo entre mi modelo de clases 72 00:02:55,699 --> 00:02:57,919 Que puede ser todo lo complejo que sea 73 00:02:57,919 --> 00:03:00,219 Pedidos, compras, clientes 74 00:03:00,219 --> 00:03:06,240 Pues hacer un mapeo entre mis clases y mis tablas 75 00:03:06,240 --> 00:03:10,360 Yo tendría ahí un montón de tablas, compras, pedidos, clientes 76 00:03:10,360 --> 00:03:11,439 Aquí un montón de clases 77 00:03:11,439 --> 00:03:18,020 Mediante anotaciones especifico cómo se traduce cada cosa en cada cosa 78 00:03:18,020 --> 00:03:20,219 una vez configurado 79 00:03:20,219 --> 00:03:22,840 ahora yo ya trabajo en el mundo 80 00:03:22,840 --> 00:03:24,699 de los objetos, mi aplicación se 81 00:03:24,699 --> 00:03:26,680 olvida completamente 82 00:03:26,680 --> 00:03:28,960 del SQL si quiere 83 00:03:28,960 --> 00:03:30,780 se olvida completamente 84 00:03:30,780 --> 00:03:32,479 del SQL y de la base de datos 85 00:03:32,479 --> 00:03:34,479 y mi aplicación 86 00:03:34,479 --> 00:03:36,919 trabaja en el mundo de objetos que existen 87 00:03:36,919 --> 00:03:38,900 y que puede 88 00:03:38,900 --> 00:03:41,240 hacer persistentes 89 00:03:41,240 --> 00:03:42,319 entonces 90 00:03:42,319 --> 00:03:44,539 persistir un objeto será 91 00:03:44,539 --> 00:03:47,020 uy, se queda conectado a la base de datos 92 00:03:47,020 --> 00:03:47,580 muy bien 93 00:03:47,580 --> 00:04:00,719 Yo ahí puedo hacer un insert o un update, puedo cambiar las propiedades, con lo cual el objeto cambia su estado y cambia sus datos en la base de datos. 94 00:04:01,180 --> 00:04:05,620 Esa es la idea, que una vez que yo he hecho el mapeo, trabaje en el mundo de los objetos. 95 00:04:06,460 --> 00:04:07,080 Esa es la idea. 96 00:04:07,580 --> 00:04:09,960 Luego todo eso tiene sus trucos, por supuesto. 97 00:04:10,379 --> 00:04:13,500 No es que yo toco los objetos y automáticamente se cambie la base de datos. 98 00:04:13,500 --> 00:04:15,840 pues no, tengo que hacer los commit 99 00:04:15,840 --> 00:04:16,439 tengo que hacer 100 00:04:16,439 --> 00:04:18,439 varias cosas 101 00:04:18,439 --> 00:04:21,480 pero bueno, esencialmente de casi 102 00:04:21,480 --> 00:04:23,040 todo lo de la base de datos me olvido 103 00:04:23,040 --> 00:04:24,959 salvo configurar 104 00:04:24,959 --> 00:04:27,420 el conector, salvo configurar la conexión 105 00:04:27,420 --> 00:04:29,720 y ya está, trabajo con las librerías 106 00:04:29,720 --> 00:04:30,800 que me ofrece el RM 107 00:04:30,800 --> 00:04:33,480 para hacer el CRUD, que son ya 108 00:04:33,480 --> 00:04:34,839 métodos muy sencillos 109 00:04:34,839 --> 00:04:37,639 insert, persist, merge 110 00:04:37,639 --> 00:04:39,560 find, métodos muy sencillos 111 00:04:39,560 --> 00:04:41,319 y ya está, esa es la idea 112 00:04:41,319 --> 00:04:43,480 y luego a través de esas librerías 113 00:04:43,480 --> 00:04:45,199 a través de esas librerías ORM 114 00:04:45,199 --> 00:04:47,079 pues puedes hacer muchísimas más cosas 115 00:04:47,079 --> 00:04:49,360 puedes lógicamente gestionar 116 00:04:49,360 --> 00:04:50,480 transacciones 117 00:04:50,480 --> 00:04:53,420 hacer procedimientos almacenados 118 00:04:53,420 --> 00:04:55,560 puedes hacer un montón de cosas 119 00:04:55,560 --> 00:04:57,040 vale 120 00:04:57,040 --> 00:05:01,370 entonces 121 00:05:01,370 --> 00:05:04,350 ahora llega 122 00:05:04,350 --> 00:05:06,810 ¿cómo se hace esto? ¿cada uno a su manera 123 00:05:06,810 --> 00:05:07,689 como le dé la gana? 124 00:05:08,389 --> 00:05:10,290 no, estandarizando, sí 125 00:05:10,290 --> 00:05:12,189 en realidad 126 00:05:12,189 --> 00:05:14,870 ¿cuál fue el primer 127 00:05:14,870 --> 00:05:16,709 bebé, que ahora es el abuelo 128 00:05:16,709 --> 00:05:19,029 de todo esto. El primer bebé 129 00:05:19,029 --> 00:05:20,569 pues nació por libre, 130 00:05:20,810 --> 00:05:22,569 así de la nada, como Jesucristo. 131 00:05:23,189 --> 00:05:23,810 Pues igual. 132 00:05:30,959 --> 00:05:33,240 Este hibernato se gestionaría, 133 00:05:33,339 --> 00:05:34,459 digo yo, en algún cerebro. 134 00:05:35,259 --> 00:05:37,300 En realidad, a ver, hubo más bebés 135 00:05:37,300 --> 00:05:38,480 antes que este, ¿vale? 136 00:05:39,000 --> 00:05:40,120 Pero bueno, este bebé... 137 00:05:40,120 --> 00:05:42,379 No, no, no. 138 00:05:42,879 --> 00:05:45,300 Lo que pasa es que esos otros bebés, pues como Struths, 139 00:05:45,360 --> 00:05:47,240 como... eran unos 140 00:05:47,240 --> 00:05:50,439 bebés más 141 00:05:50,439 --> 00:05:52,439 confusos. No acababan 142 00:05:52,439 --> 00:05:54,560 de ser exactamente un ORM 143 00:05:54,560 --> 00:05:56,439 tal cual. Eran como muy 144 00:05:56,439 --> 00:05:58,160 ligeros, mezclaban mucho SQL, 145 00:05:58,379 --> 00:06:00,279 pero se usan, por supuesto. 146 00:06:01,040 --> 00:06:02,399 Y Bernat fue como el primer 147 00:06:02,399 --> 00:06:04,000 bebé creado así por las buenas 148 00:06:04,000 --> 00:06:06,500 para decir un ORM puro 149 00:06:06,500 --> 00:06:07,980 que realmente te permite 150 00:06:07,980 --> 00:06:10,060 olvidarte del SQL 151 00:06:10,060 --> 00:06:12,540 si quieres olvidarte de la complejidad de la base 152 00:06:12,540 --> 00:06:12,980 de datos. 153 00:06:14,220 --> 00:06:15,800 Ahora viene la gran pregunta. 154 00:06:15,800 --> 00:06:18,620 Le voy a llamar hibernate el resto de mi vida 155 00:06:18,620 --> 00:06:20,399 ¿Vale? Vosotros llamadle como os dé la gana 156 00:06:20,399 --> 00:06:22,759 Hibernate, como salga de ahí 157 00:06:22,759 --> 00:06:24,620 Yo le voy a llamar hibernate 158 00:06:24,620 --> 00:06:25,180 ¿Vale? 159 00:06:25,860 --> 00:06:27,480 Pues ya está 160 00:06:27,480 --> 00:06:32,180 Lo digo por si me preguntáis 161 00:06:32,180 --> 00:06:33,699 Y no entiendo de qué me estáis hablando 162 00:06:33,699 --> 00:06:36,079 ¿Cómo le queréis llamar? 163 00:06:36,240 --> 00:06:36,860 Hibernate va 164 00:06:36,860 --> 00:06:39,800 Hibernate, vale, pues así le voy a llamar 165 00:06:39,800 --> 00:06:41,540 Hibernate 166 00:06:41,540 --> 00:06:43,839 Es como Eclipse, pues ya está 167 00:06:43,839 --> 00:06:45,259 No tengo ni idea 168 00:06:45,259 --> 00:06:46,180 yo creo que no 169 00:06:46,180 --> 00:06:49,779 bueno, pues entonces 170 00:06:49,779 --> 00:06:50,740 ahora 171 00:06:50,740 --> 00:06:53,019 este tiene 172 00:06:53,019 --> 00:06:54,959 su propia manera de funcionar 173 00:06:54,959 --> 00:06:56,740 su propia manera de configurarse 174 00:06:56,740 --> 00:06:58,319 completamente al margen de 175 00:06:58,319 --> 00:07:00,160 estándares de Java 176 00:07:00,160 --> 00:07:02,439 de Spring, de todo 177 00:07:02,439 --> 00:07:05,060 hay un hibernate puro y duro 178 00:07:05,060 --> 00:07:06,620 y maduro y estupendo 179 00:07:06,620 --> 00:07:08,399 y potente y maravilloso 180 00:07:08,399 --> 00:07:13,360 maduro, maduro, potente y maravilloso 181 00:07:13,360 --> 00:07:14,360 que uno puede usar 182 00:07:14,360 --> 00:07:16,839 y otros años pues hemos usado 183 00:07:16,839 --> 00:07:18,819 al principio hibernate puro sin más 184 00:07:18,819 --> 00:07:20,399 porque es la base 185 00:07:20,399 --> 00:07:22,959 para luego usarlo con los estándares que van por arriba 186 00:07:22,959 --> 00:07:24,920 pero bueno, vamos a dejar 187 00:07:24,920 --> 00:07:26,680 el uso del hibernate puro sin más 188 00:07:26,680 --> 00:07:28,699 para si nos sobra tiempo un poquito más adelante 189 00:07:28,699 --> 00:07:31,120 y vamos a verlo en otro contexto 190 00:07:31,120 --> 00:07:33,079 bueno, pues hibernate 191 00:07:33,079 --> 00:07:34,839 nació, creció, se hizo grande 192 00:07:34,839 --> 00:07:35,500 y poderoso 193 00:07:35,500 --> 00:07:38,439 pero en paralelo 194 00:07:38,439 --> 00:07:40,879 viene el mundo de la estandarización 195 00:07:40,879 --> 00:07:42,399 aquí hay que estandarizar 196 00:07:42,399 --> 00:07:45,139 a qué hay que unificar, etc. 197 00:07:46,300 --> 00:07:47,959 Bueno, pues en Java 198 00:07:47,959 --> 00:07:51,899 la estandarización en cuanto a la persistencia 199 00:07:51,899 --> 00:07:54,680 acceso a datos, persistencia, estamos en nuevos sinónimos 200 00:07:54,680 --> 00:07:57,199 ¿Cuál es? Pues es JPA 201 00:07:57,199 --> 00:08:01,050 de hecho como su nombre indica 202 00:08:01,050 --> 00:08:08,120 Java Persistence API 203 00:08:08,120 --> 00:08:12,879 Entonces esta API es la que te ofrece todos los métodos 204 00:08:12,879 --> 00:08:16,720 y todas las movidas para acceder a una base de datos 205 00:08:16,720 --> 00:08:18,800 desde el mundo de los objetos 206 00:08:18,800 --> 00:08:21,660 asumiendo que los objetos son persistentes 207 00:08:21,660 --> 00:08:23,319 están conectados 208 00:08:23,319 --> 00:08:24,480 a la base de datos 209 00:08:24,480 --> 00:08:26,639 mapeados de alguna manera 210 00:08:26,639 --> 00:08:28,720 y 211 00:08:28,720 --> 00:08:30,860 te ofrecen los métodos para que tú 212 00:08:30,860 --> 00:08:32,860 los recuperes 213 00:08:32,860 --> 00:08:35,179 los modifiques, hagas commit 214 00:08:35,179 --> 00:08:37,179 para que esas modificaciones se reflejen 215 00:08:37,179 --> 00:08:39,200 pero tú del SQL pasas completamente 216 00:08:39,200 --> 00:08:40,779 tocas los objetos 217 00:08:40,779 --> 00:08:43,019 y llamas a métodos 218 00:08:43,019 --> 00:08:44,779 de aquí y esos métodos 219 00:08:44,779 --> 00:08:46,419 hacen los commit, hacen los insert 220 00:08:46,419 --> 00:08:47,279 hacen las cositas 221 00:08:47,279 --> 00:08:50,600 para que en la base de datos todo quede consistente 222 00:08:50,600 --> 00:08:52,320 con el estado de los objetos 223 00:08:52,320 --> 00:08:53,159 de la aplicación 224 00:08:53,159 --> 00:08:58,039 pero JPA es una API 225 00:08:58,039 --> 00:09:00,480 entonces JPA necesita 226 00:09:00,480 --> 00:09:02,240 que alguien la implemente 227 00:09:02,240 --> 00:09:04,659 y le dé un funcionamiento 228 00:09:04,659 --> 00:09:07,659 se lo pueden dar muchos 229 00:09:07,659 --> 00:09:09,279 pero ella 230 00:09:09,279 --> 00:09:12,659 esencialmente casi solamente lo mejor 231 00:09:12,659 --> 00:09:15,279 es el que más le gusta 232 00:09:15,279 --> 00:09:32,120 Y al final es el que casi siempre se ha quedado y el que siempre se usa. El estándar de facto en el uso de aplicaciones Java persistentes es que sea este el que implemente JPA. Entonces, cuando usamos JPA, pues usamos la dependencia de Ibermate también, claro. 233 00:09:32,120 --> 00:09:55,360 ¿Vale? Pero claro, todo esto no es nadie si no tiene debajo al que verdaderamente accede a la base de datos, porque aquí estos pueden decir lo que les dé la gana, pero quien realmente accede a la base de datos es JDC, tal y como lo hemos visto, tal y como lo hemos visto. 234 00:09:55,360 --> 00:10:09,700 Entonces, ¿qué estamos haciendo? Le estamos poniendo esta capa por encima. Le ponemos un JPA implementado con hibernate, pero hibernate por debajo va a estar usando JBC, es que no hay otra. 235 00:10:09,700 --> 00:10:14,139 entonces nosotros 236 00:10:14,139 --> 00:10:15,779 llevamos a los métodos de JPA 237 00:10:15,779 --> 00:10:20,279 para nuestros objetos 238 00:10:20,279 --> 00:10:22,159 con eso conseguimos 239 00:10:22,159 --> 00:10:24,559 sincronización con las tablas 240 00:10:24,559 --> 00:10:27,730 JPA 241 00:10:27,730 --> 00:10:29,610 estará llamando por debajo a este 242 00:10:29,610 --> 00:10:31,429 de aquí, más que estará llamando 243 00:10:31,429 --> 00:10:32,850 lo está utilizando por dentro 244 00:10:32,850 --> 00:10:34,710 lo está utilizando para implementarse 245 00:10:34,710 --> 00:10:36,830 y este sí o sí usa JF 246 00:10:36,830 --> 00:10:38,009 con lo cual 247 00:10:38,009 --> 00:10:40,549 el driver de MySQL es imprescindible 248 00:10:40,549 --> 00:10:43,450 Luego dependencia de hibernate 249 00:10:43,450 --> 00:10:44,330 Tendremos que tener 250 00:10:44,330 --> 00:10:46,309 Dependencia de JBBC también 251 00:10:46,309 --> 00:10:47,529 No nos la podemos quitar 252 00:10:47,529 --> 00:10:50,350 Y esto no hace falta dependencia en sí 253 00:10:50,350 --> 00:10:53,330 Porque está integrado en la propia distribución 254 00:10:53,330 --> 00:10:56,490 Entonces este sería un uso 255 00:10:56,490 --> 00:10:58,570 El JPA puro 256 00:10:58,570 --> 00:11:00,230 ¿Vale? JPA puro 257 00:11:00,230 --> 00:11:02,429 Que es el que tenemos que ver 258 00:11:02,429 --> 00:11:04,049 Luego otra cosa es que digamos 259 00:11:04,049 --> 00:11:05,409 Este la T, este la T 260 00:11:05,409 --> 00:11:09,070 Vamos a ponerle otra capa más 261 00:11:09,070 --> 00:11:09,850 Ya que nos encanta 262 00:11:09,850 --> 00:11:10,870 Uy, ¿qué pasó? 263 00:11:10,870 --> 00:11:13,070 No, has borrado 264 00:11:13,070 --> 00:11:15,049 Uy, no me puedo ir arriba 265 00:11:15,049 --> 00:11:18,730 Uy, de verdad 266 00:11:18,730 --> 00:11:22,870 No pasa nada 267 00:11:22,870 --> 00:11:24,049 Acá ya he sacado unos diagramas 268 00:11:24,049 --> 00:11:26,570 Vale 269 00:11:26,570 --> 00:11:28,789 Uy, qué nivel, ¿no? 270 00:11:36,100 --> 00:11:36,700 JPA 271 00:11:36,700 --> 00:11:40,019 Y ahora sí, JPA 272 00:11:40,019 --> 00:11:42,779 No queremos usarlo así 273 00:11:42,779 --> 00:11:44,440 Porque es que 274 00:11:44,440 --> 00:11:46,259 Ya nos quita trabajo 275 00:11:46,259 --> 00:11:49,000 Pero aún así todavía queremos las cosas más fáciles 276 00:11:49,000 --> 00:11:49,399 Todavía 277 00:11:49,399 --> 00:11:52,580 Porque se nos genera trinceto 278 00:11:52,580 --> 00:11:54,279 Pues podemos poner 279 00:11:54,279 --> 00:11:55,279 Spring Data 280 00:11:55,279 --> 00:11:57,320 JPA 281 00:11:57,320 --> 00:12:01,059 Que es la parte de Spring 282 00:12:01,059 --> 00:12:02,659 ¿Vale? 283 00:12:02,700 --> 00:12:03,840 Que es la parte de Spring 284 00:12:03,840 --> 00:12:06,679 Que nos ofrece 285 00:12:06,679 --> 00:12:08,740 Funcionalidades de acceso a datos 286 00:12:08,740 --> 00:12:09,519 Con JPA 287 00:12:09,519 --> 00:12:12,220 que nos da un montón de trabajo hecho 288 00:12:12,220 --> 00:12:14,580 bueno, pero vamos a ver 289 00:12:14,580 --> 00:12:16,379 antes de empezar ya a ver 290 00:12:16,379 --> 00:12:18,200 ejemplos concretos de proyectos 291 00:12:18,200 --> 00:12:19,200 de cómo hacerlo con esto 292 00:12:19,200 --> 00:12:20,919 vamos a ver un poquito 293 00:12:20,919 --> 00:12:23,759 detalles de la arquitectura de esto de aquí 294 00:12:23,759 --> 00:12:26,259 para que nos suenen los nombres y las cosas 295 00:12:26,259 --> 00:12:28,379 porque luego os vais a ir todos de charla 296 00:12:28,379 --> 00:12:29,919 estáis un viernes por la noche 297 00:12:29,919 --> 00:12:32,220 a las 4 de la mañana, os sacamos de más de conversación 298 00:12:32,220 --> 00:12:34,100 y si no tenéis términos 299 00:12:34,100 --> 00:12:36,440 interesantes de los que hablar, pues la tía o el tío 300 00:12:36,440 --> 00:12:36,960 se os pira 301 00:12:36,960 --> 00:12:39,759 que nos ha pasado a todos 302 00:12:39,759 --> 00:12:42,480 claro 303 00:12:42,480 --> 00:12:44,100 y si le dices eso ya no se te va 304 00:12:44,100 --> 00:12:52,519 pues se le puede sacar 305 00:12:52,519 --> 00:12:53,179 mucho partido 306 00:12:53,179 --> 00:12:57,960 si te dice que sí 307 00:12:57,960 --> 00:12:59,460 la tienes en el bote 308 00:12:59,460 --> 00:13:06,360 no hombre, si alguien es capaz 309 00:13:06,360 --> 00:13:08,980 de que a las 4 de la mañana escucharte un rollo de Sprint 310 00:13:08,980 --> 00:13:09,960 es que está muy enamorado 311 00:13:09,960 --> 00:13:17,279 vale, pues el habla virtual 312 00:13:17,279 --> 00:13:18,220 a ver 313 00:13:18,220 --> 00:13:20,080 esto es un texto 314 00:13:20,080 --> 00:13:22,879 en el cual 315 00:13:22,879 --> 00:13:25,120 podéis leer 316 00:13:25,120 --> 00:13:27,120 una introducción mejor escrita 317 00:13:27,120 --> 00:13:28,860 que 318 00:13:28,860 --> 00:13:29,940 lo que 319 00:13:29,940 --> 00:13:31,899 esto está ya mejor escrito 320 00:13:31,899 --> 00:13:37,899 A ver, porque todo esto 321 00:13:37,899 --> 00:13:39,879 es una cosa que merecía la pena escribirlo 322 00:13:39,879 --> 00:13:42,019 Entonces, en origen era un texto mío 323 00:13:42,019 --> 00:13:43,639 y luego le he dicho a Chargetete 324 00:13:43,639 --> 00:13:45,799 Me toca ver el título más bonito 325 00:13:45,799 --> 00:13:47,919 y corrígeme si me lo he equivocado 326 00:13:47,919 --> 00:13:49,679 y me ha quedado 327 00:13:49,679 --> 00:13:52,039 y luego yo 328 00:13:52,039 --> 00:13:53,200 lo he vuelto a tunear también 329 00:13:53,200 --> 00:13:55,539 y ha quedado algo que yo creo que explica 330 00:13:55,539 --> 00:13:57,620 más o menos bien el contexto de lo que vamos a ver 331 00:13:57,620 --> 00:13:59,460 Entonces, el que tenga ganas 332 00:13:59,460 --> 00:14:00,419 se lo lee 333 00:14:00,419 --> 00:14:02,200 que deberíais leerlo 334 00:14:02,200 --> 00:14:03,899 porque no os acordáis, ¿verdad? 335 00:14:04,419 --> 00:14:04,700 hombre 336 00:14:04,700 --> 00:14:05,299 vale 337 00:14:05,299 --> 00:14:09,700 vale, entonces aquí por ejemplo 338 00:14:09,700 --> 00:14:10,720 está este cuadrito 339 00:14:10,720 --> 00:14:12,240 que 340 00:14:12,240 --> 00:14:15,460 nos pone la situación muy en general 341 00:14:15,460 --> 00:14:16,480 de la persistencia 342 00:14:16,480 --> 00:14:19,279 este es el ORN 343 00:14:19,279 --> 00:14:21,580 entonces 344 00:14:21,580 --> 00:14:24,379 nuestra aplicación va a tener objetos 345 00:14:24,379 --> 00:14:26,700 pero los objetos pueden ser 346 00:14:26,700 --> 00:14:28,379 transitorios 347 00:14:28,379 --> 00:14:29,740 o persistentes 348 00:14:29,740 --> 00:14:32,759 los persistentes 349 00:14:32,759 --> 00:14:34,639 estarán en el marco 350 00:14:34,639 --> 00:14:36,480 de persistencia del ORM 351 00:14:36,480 --> 00:14:38,539 y los 352 00:14:38,539 --> 00:14:40,539 persistentes serán 353 00:14:40,539 --> 00:14:42,840 los que el ORM se encargue 354 00:14:42,840 --> 00:14:44,600 de sincronizar con 355 00:14:44,600 --> 00:14:46,679 la base de datos, para que los datos 356 00:14:46,679 --> 00:14:48,580 que tienen los objetos sean los que estén en la base 357 00:14:48,580 --> 00:14:50,799 de datos, a respuesta de nuestras 358 00:14:50,799 --> 00:14:52,620 órdenes, no es que lo haga solo, o sea, esto no es 359 00:14:52,620 --> 00:14:54,500 que lo haga todo solo, hay que hacerlo 360 00:14:54,500 --> 00:14:56,620 ¿vale? entonces 361 00:14:56,620 --> 00:14:58,399 lógicamente el ORM tira del 362 00:14:58,399 --> 00:14:59,240 Conector JL. 363 00:15:01,679 --> 00:15:02,120 Imprescindible. 364 00:15:02,779 --> 00:15:03,960 Configurar el mapeo. 365 00:15:04,639 --> 00:15:05,399 Esto es el rollo. 366 00:15:05,500 --> 00:15:06,820 Tenemos que configurar el mapeo 367 00:15:06,820 --> 00:15:08,700 para que esté claro y todo funcione. 368 00:15:09,860 --> 00:15:10,059 ¿Vale? 369 00:15:10,080 --> 00:15:10,919 Pero bueno, hay trucos. 370 00:15:11,500 --> 00:15:13,639 Hay trucos también para que te lo hagas medio solo. 371 00:15:14,259 --> 00:15:18,240 Bueno, este sería el esquema más general, 372 00:15:18,399 --> 00:15:19,840 más grosero de la situación. 373 00:15:20,460 --> 00:15:20,700 ¿Vale? 374 00:15:21,360 --> 00:15:23,200 Aquí te sigue contando rollo. 375 00:15:23,539 --> 00:15:23,700 Vale. 376 00:15:23,759 --> 00:15:25,759 La mayoría de los ORM aquí menciono. 377 00:15:25,759 --> 00:15:29,080 técnicas de mapeo 378 00:15:29,080 --> 00:15:29,779 lo que os he dicho 379 00:15:29,779 --> 00:15:33,320 en origen a través de un fichero 380 00:15:33,320 --> 00:15:35,440 aparte xml o json que especificaba 381 00:15:35,440 --> 00:15:37,399 el mapeo, ahora actualmente 382 00:15:37,399 --> 00:15:38,659 esencialmente anotaciones 383 00:15:38,659 --> 00:15:40,720 que es lo que vamos a usar nosotros 384 00:15:40,720 --> 00:15:43,679 vale, los ORM 385 00:15:43,679 --> 00:15:47,580 te permiten hacer consultas 386 00:15:47,580 --> 00:15:49,120 también a tu manera y te incorporan 387 00:15:49,120 --> 00:15:50,019 lenguajes propios 388 00:15:50,019 --> 00:15:53,159 el hibernate por ejemplo 389 00:15:53,159 --> 00:15:55,340 te da el hql 390 00:15:55,340 --> 00:15:57,620 que es un lenguaje propio de consultas. 391 00:15:59,919 --> 00:16:03,460 JPA te incorpora al JPQL, luego veremos qué significa. 392 00:16:03,639 --> 00:16:07,200 Pero bueno, aquí habla un poco de Ibernate, esto la idea es que lo leáis. 393 00:16:08,320 --> 00:16:12,080 Y aquí tenemos este cuadro, pero que lo tengo sacado yo en mis diapositivas de cuadros. 394 00:16:13,879 --> 00:16:18,539 Aquí explica el estado de los objetos dentro de ese contexto de persistencia. 395 00:16:19,440 --> 00:16:22,639 Transistorio no está asociado, persistente sí estará asociado. 396 00:16:22,639 --> 00:16:26,120 aunque también luego están estos otros dos estados 397 00:16:26,120 --> 00:16:29,679 pero bueno, el objeto que ha sido persistente 398 00:16:29,679 --> 00:16:31,539 lo puedes separar 399 00:16:31,539 --> 00:16:35,279 y ya deja de ser persistente, ya no está conectado a la base de datos 400 00:16:35,279 --> 00:16:38,179 y el objeto que está en un contexto de persistencia 401 00:16:38,179 --> 00:16:41,379 lo puedes marcar para eliminar y cuando se haga el commit 402 00:16:41,379 --> 00:16:43,419 se queda el eliminado de la base de datos 403 00:16:43,419 --> 00:16:49,240 aquí en este documento está un poquito el esquema 404 00:16:49,240 --> 00:16:51,159 del estado que tendrán los objetos 405 00:16:51,159 --> 00:16:53,720 dentro de ese 406 00:16:53,720 --> 00:16:55,960 marco de persistencia que gestiona 407 00:16:55,960 --> 00:16:56,759 el ORM. 408 00:16:57,980 --> 00:16:59,600 ¿Vale? Tú, en tu aplicación, 409 00:16:59,759 --> 00:17:01,940 creas los objetos, conmigo o como te dé la gana, 410 00:17:02,059 --> 00:17:02,539 los creas. 411 00:17:02,539 --> 00:17:04,980 ¿Por qué se va otra vez a persistir 412 00:17:04,980 --> 00:17:05,619 el polígono de la gente? 413 00:17:06,880 --> 00:17:08,220 Es que no me ha dado tiempo ni a... 414 00:17:08,220 --> 00:17:09,420 Estaba saliendo de aquí. 415 00:17:09,960 --> 00:17:11,200 Ya, pero eso tiene sentido. 416 00:17:11,880 --> 00:17:13,279 La vida que no veo tiene mucho sentido. 417 00:17:16,420 --> 00:17:17,559 Pero me has hecho un update. 418 00:17:17,660 --> 00:17:19,039 Yo me he hecho un update por ningún sitio. 419 00:17:20,299 --> 00:17:20,799 No he hecho un update. 420 00:17:21,220 --> 00:17:22,200 Detache de separado. 421 00:17:22,200 --> 00:17:28,380 Porque lo puedes volver a actualizar 422 00:17:28,380 --> 00:17:33,660 A ver, que esto es para hacernos una idea 423 00:17:33,660 --> 00:17:34,960 Es hacernos una idea 424 00:17:34,960 --> 00:17:36,440 Esto no es la base de la aplicación 425 00:17:36,440 --> 00:17:37,700 Luego en los proyectos ya lo veremos 426 00:17:37,700 --> 00:17:39,400 Es para ponernos en contexto 427 00:17:39,400 --> 00:17:41,819 Pues tu aplicación arranca 428 00:17:41,819 --> 00:17:43,420 Y tiene sus objetos 429 00:17:43,420 --> 00:17:45,180 Que instanciarás como te dé la gana 430 00:17:45,180 --> 00:17:46,200 Tiene los objetos 431 00:17:46,200 --> 00:17:48,779 Todos esos objetos con los que trabaja la aplicación 432 00:17:48,779 --> 00:17:50,859 Y hacer cosas con ellos son objetos transitorios 433 00:17:50,859 --> 00:17:52,579 A mí no hay persistencia ni hay nada. 434 00:17:53,220 --> 00:17:55,059 Entonces, el ORM te tiene que dar una manera 435 00:17:55,059 --> 00:17:56,440 de hacerlos persistentes. 436 00:17:57,099 --> 00:17:59,880 Que entren en el contexto de persistencia. 437 00:18:00,660 --> 00:18:02,779 Normalmente ese método se suele llamar persist. 438 00:18:03,640 --> 00:18:03,859 ¿Vale? 439 00:18:04,720 --> 00:18:05,220 ¿Y merge? 440 00:18:05,579 --> 00:18:05,960 Vale. 441 00:18:06,920 --> 00:18:07,900 Merge también. 442 00:18:08,200 --> 00:18:10,240 Lo que pasa es que este se usa normalmente 443 00:18:10,240 --> 00:18:15,000 para actualizar un objeto persistente. 444 00:18:15,119 --> 00:18:17,640 Bueno, es que esto depende mucho del ORM en particular. 445 00:18:18,539 --> 00:18:19,480 Esto es la idea. 446 00:18:19,480 --> 00:18:22,279 vale, el objeto se convierte en persistente 447 00:18:22,279 --> 00:18:24,220 entonces con este objeto tú ya trabajas 448 00:18:24,220 --> 00:18:25,660 haces tus cosas y ya está 449 00:18:25,660 --> 00:18:26,920 y 450 00:18:26,920 --> 00:18:29,960 con los sucesivos commit 451 00:18:29,960 --> 00:18:31,359 con los sucesivos commit 452 00:18:31,359 --> 00:18:34,319 el estado del objeto se va a reflejar 453 00:18:34,319 --> 00:18:35,059 en la base de datos 454 00:18:35,059 --> 00:18:38,640 aquí faltaría, esto está conectado a la base de datos 455 00:18:38,640 --> 00:18:39,180 vale 456 00:18:39,180 --> 00:18:42,200 vale, cada vez que hagas un refresh 457 00:18:42,200 --> 00:18:44,519 si el estado del objeto en la base de datos 458 00:18:44,519 --> 00:18:46,519 ha cambiado, pues este se sincronizará 459 00:18:47,259 --> 00:18:48,759 si en un momento dado 460 00:18:48,759 --> 00:18:50,700 no te interesa que esté conectado 461 00:18:50,700 --> 00:18:52,819 con la base de datos, lo puedes separar 462 00:18:52,819 --> 00:18:54,599 y se convierte en separado 463 00:18:54,599 --> 00:18:56,880 del cual podría volver aquí otra vez 464 00:18:56,880 --> 00:18:58,920 cuando el objeto 465 00:18:58,920 --> 00:18:59,960 lo quieres eliminar 466 00:18:59,960 --> 00:19:02,059 lo marcas como remove 467 00:19:02,059 --> 00:19:05,160 pasa a este 468 00:19:05,160 --> 00:19:06,799 estado, cuando ya se hagan los commit 469 00:19:06,799 --> 00:19:08,859 correspondientes, ese objeto 470 00:19:08,859 --> 00:19:10,420 ese dato 471 00:19:10,420 --> 00:19:12,119 desaparecerá de la base de datos 472 00:19:12,119 --> 00:19:14,440 desaparecerá de la base de datos 473 00:19:14,440 --> 00:19:16,640 se supone que ese objeto tú luego lo querrás 474 00:19:16,640 --> 00:19:18,460 para que el reconector de basura se lo lleve 475 00:19:18,460 --> 00:19:20,420 no, pero ese es otro tema. Lo que importa es que 476 00:19:20,420 --> 00:19:21,299 desaparezca la masividad. 477 00:19:22,180 --> 00:19:24,279 Esa es un poco la idea. Que nos suene 478 00:19:24,279 --> 00:19:26,180 que hay estos cuatro tipos de objetos. 479 00:19:26,299 --> 00:19:28,819 Que hay un contexto de persistencia que no se nos tiene que olvidar. 480 00:19:29,480 --> 00:19:30,319 En el ORM. 481 00:19:31,160 --> 00:19:31,480 Vale. 482 00:19:32,160 --> 00:19:34,380 Y ya está. Bueno, entonces os leéis esto 483 00:19:34,380 --> 00:19:36,539 para clarificar un poco 484 00:19:36,539 --> 00:19:38,299 los conceptos básicos de 485 00:19:38,299 --> 00:19:40,299 los ORMs. 486 00:19:40,619 --> 00:19:41,000 Ahora, 487 00:19:42,460 --> 00:19:43,380 volvemos aquí. 488 00:19:44,480 --> 00:19:57,440 Arquitectura. Tenemos 489 00:19:57,440 --> 00:19:59,640 esto, esto y esto. 490 00:19:59,640 --> 00:20:17,619 Vale, esto es, este cuadro representa lo mismo que estaba en los apuntes, ¿vale? El objeto nuevo, el objeto existente y aquí ya es un objeto manejado por el ORM, ¿vale? 491 00:20:17,619 --> 00:20:19,779 pues este método, cuando se hacen 492 00:20:19,779 --> 00:20:22,000 los commit y los métodos 493 00:20:22,000 --> 00:20:23,859 correspondientes que en Invernate JPA 494 00:20:23,859 --> 00:20:25,680 es plus, pues actualizan la base 495 00:20:25,680 --> 00:20:27,799 de datos, lo recuperas de la base 496 00:20:27,799 --> 00:20:29,119 de datos con el método find 497 00:20:29,119 --> 00:20:31,599 y tienes un objeto persistente también porque lo has 498 00:20:31,599 --> 00:20:33,960 recuperado, lo puedes pasar a eliminado 499 00:20:33,960 --> 00:20:35,259 lo puedes pasar a separado 500 00:20:35,259 --> 00:20:36,980 bueno, esa es la idea, vale 501 00:20:36,980 --> 00:20:39,759 este cuadro nos importará menos porque precisamente 502 00:20:39,759 --> 00:20:41,359 estos métodos son los que vamos a trabajar 503 00:20:41,359 --> 00:20:43,759 ahora la arquitectura esta con la que 504 00:20:43,759 --> 00:20:44,579 os quería yo 505 00:20:44,579 --> 00:20:46,920 ilustrar, pues para que tuvierais 506 00:20:46,920 --> 00:20:48,599 tema de conversación, a las 4 de la mañana 507 00:20:48,599 --> 00:20:50,539 ya nos quedamos, y conocierais 508 00:20:50,539 --> 00:20:52,720 esos términos que todo el mundo conoce 509 00:20:52,720 --> 00:20:54,480 todo el mundo 510 00:20:54,480 --> 00:20:57,079 dígame 511 00:20:57,079 --> 00:20:57,740 ¿estás grabando? 512 00:20:58,319 --> 00:20:58,680 sí 513 00:20:58,680 --> 00:21:02,480 vale, pues a ver 514 00:21:02,480 --> 00:21:05,039 esto ya lo hemos 515 00:21:05,039 --> 00:21:05,640 mencionado 516 00:21:05,640 --> 00:21:08,519 ¿de qué arquitectura estamos hablando? 517 00:21:08,740 --> 00:21:10,200 esto es lo que yo he escrito en la pizarra 518 00:21:10,200 --> 00:21:12,420 base de datos, JDBC por encima 519 00:21:12,420 --> 00:21:15,160 hibernate que implementa JPA 520 00:21:15,160 --> 00:21:17,420 y mi aplicación 521 00:21:17,420 --> 00:21:18,900 que puede 522 00:21:18,900 --> 00:21:21,000 directamente trabajar con JPA 523 00:21:21,000 --> 00:21:23,259 a través de su objeto 524 00:21:23,259 --> 00:21:25,160 su manejador 525 00:21:25,160 --> 00:21:27,400 de entidades 526 00:21:27,400 --> 00:21:28,259 que sería este 527 00:21:28,259 --> 00:21:31,339 o puede trabajar con el Spring Data JPA 528 00:21:31,339 --> 00:21:34,470 tendremos que hacer las dos versiones 529 00:21:36,640 --> 00:21:38,500 esta hay que explicar 530 00:21:38,500 --> 00:21:40,079 y esta es la bonita 531 00:21:40,079 --> 00:21:40,900 ¿vale? 532 00:21:41,759 --> 00:21:43,559 esta es la arquitectura de hibernate 533 00:21:43,559 --> 00:21:45,680 esto 534 00:21:45,680 --> 00:21:48,720 es lo que está aquí dentro en realidad 535 00:21:48,720 --> 00:21:50,859 lo que está aquí 536 00:21:50,859 --> 00:21:52,680 y JPA lo llama 537 00:21:52,680 --> 00:21:55,079 esto que está aquí dentro 538 00:21:55,079 --> 00:21:56,960 esto moradito hibernate que JPA 539 00:21:56,960 --> 00:21:58,960 lo llama es todo esto, es decir 540 00:21:58,960 --> 00:22:00,980 es un conglomerado de tecnologías 541 00:22:00,980 --> 00:22:02,980 de muchísimas que hibernate 542 00:22:02,980 --> 00:22:03,940 usa, muchísimas 543 00:22:03,940 --> 00:22:06,799 por supuesto debajo está la base de datos 544 00:22:06,799 --> 00:22:08,920 y por encima de la base de datos está 545 00:22:08,920 --> 00:22:10,000 JDBC 546 00:22:10,000 --> 00:22:13,220 vale, pero también necesitamos 547 00:22:13,220 --> 00:22:15,180 poder localizar recursos 548 00:22:15,180 --> 00:22:16,859 que están por ahí distribuidos 549 00:22:16,859 --> 00:22:19,200 pues para eso tenemos el módulo 550 00:22:19,200 --> 00:22:20,180 Java 551 00:22:20,180 --> 00:22:22,000 el JNDI 552 00:22:22,000 --> 00:22:25,460 que esto viene de Java Name Domain 553 00:22:25,460 --> 00:22:27,200 algo 554 00:22:27,200 --> 00:22:29,579 JNDI 555 00:22:29,579 --> 00:22:30,799 si lo buscáis por ahí 556 00:22:30,799 --> 00:22:34,640 este es el módulo que se ocupa 557 00:22:34,640 --> 00:22:36,920 de localizar los recursos 558 00:22:36,920 --> 00:22:37,799 que están por ahí 559 00:22:37,799 --> 00:22:40,680 porque podemos trabajar con bases de datos 560 00:22:40,680 --> 00:22:41,579 que están en cualquier lado 561 00:22:41,579 --> 00:22:43,079 con recursos que están en cualquier lado 562 00:22:43,079 --> 00:22:45,839 vale, esta es la parte 563 00:22:45,839 --> 00:22:47,779 que se ocupa de las 564 00:22:47,779 --> 00:22:49,400 transacciones 565 00:22:49,400 --> 00:22:51,640 ¿vale? Java Transactions 566 00:22:51,640 --> 00:22:52,140 API 567 00:22:52,140 --> 00:22:54,039 entonces 568 00:22:54,039 --> 00:22:56,839 Hibernate trabaja con 569 00:22:56,839 --> 00:22:59,799 un objeto sesión, ese es el fundamental 570 00:22:59,799 --> 00:23:01,039 la sesión 571 00:23:01,039 --> 00:23:03,519 hay que abrir una sesión y cuando 572 00:23:03,519 --> 00:23:05,900 se abre una sesión aparece un contexto de persistencia 573 00:23:05,900 --> 00:23:07,839 esa sesión 574 00:23:07,839 --> 00:23:08,640 ¿quién la crea? 575 00:23:09,400 --> 00:23:10,519 una sesión factory 576 00:23:10,519 --> 00:23:12,279 ¿Vale? La aplicación está aquí 577 00:23:12,279 --> 00:23:14,140 Que tendrá sus objetos transitorios 578 00:23:14,140 --> 00:23:16,000 Si 579 00:23:16,000 --> 00:23:17,599 Creamos un session factory 580 00:23:17,599 --> 00:23:19,940 Y él crea una sesión 581 00:23:19,940 --> 00:23:22,140 Automáticamente aparece un contexto 582 00:23:22,140 --> 00:23:23,880 De persistencia en el cual ya podemos 583 00:23:23,880 --> 00:23:25,099 Meter objetos persistentes 584 00:23:25,099 --> 00:23:28,500 Bien, porque hemos hecho persistentes 585 00:23:28,500 --> 00:23:30,039 Los de la aplicación 586 00:23:30,039 --> 00:23:31,859 O bien porque hemos recuperado 587 00:23:31,859 --> 00:23:33,720 De la base de datos, por ambas vías 588 00:23:33,720 --> 00:23:34,980 Desde arriba y desde abajo 589 00:23:34,980 --> 00:23:36,779 Pueden llegar objetos persistentes ahí 590 00:23:36,779 --> 00:23:38,299 ¿Vale? 591 00:23:38,299 --> 00:23:41,319 Entonces, la sesión es el núcleo de 592 00:23:41,319 --> 00:23:42,019 Libertad 593 00:23:42,019 --> 00:23:42,859 ¿Vale? 594 00:23:44,220 --> 00:23:45,799 No es obligatorio 595 00:23:45,799 --> 00:23:48,720 Pero se recomienda trabajar siempre con transacciones 596 00:23:48,720 --> 00:23:50,539 O sea, es obligatorio 597 00:23:50,539 --> 00:23:52,980 Cuando actualizamos 598 00:23:52,980 --> 00:23:53,759 La base de datos 599 00:23:53,759 --> 00:23:56,680 No lo es cuando hacemos consultas 600 00:23:56,680 --> 00:23:58,819 Pero un poquito por homogeneidad 601 00:23:58,819 --> 00:24:01,180 Por, se dice, mira, por defecto 602 00:24:01,180 --> 00:24:02,759 Mételo todo siempre en una transacción 603 00:24:02,759 --> 00:24:04,779 Y ya está, entonces la sesión crea la transacción 604 00:24:04,779 --> 00:24:07,319 ¿Vale? 605 00:24:07,319 --> 00:24:09,720 entonces, este es el que te provee 606 00:24:09,720 --> 00:24:11,559 de las conexiones, que se apoya sobre 607 00:24:11,559 --> 00:24:13,359 JDBC, la sesión 608 00:24:13,359 --> 00:24:14,759 lógicamente necesita 609 00:24:14,759 --> 00:24:16,720 este proveedor de conexiones 610 00:24:16,720 --> 00:24:19,119 el manejador este de transacciones 611 00:24:19,119 --> 00:24:21,740 que se apoya en este JTA 612 00:24:21,740 --> 00:24:23,539 aunque no obligatorio 613 00:24:23,539 --> 00:24:25,599 podría saltárselo, bueno, esto lo pongo 614 00:24:25,599 --> 00:24:27,279 solo para ilustrar 615 00:24:27,279 --> 00:24:28,460 que esto 616 00:24:28,460 --> 00:24:31,200 es una arquitectura ya compleja 617 00:24:31,200 --> 00:24:33,259 según vamos poniendo cambios, es una arquitectura compleja 618 00:24:33,259 --> 00:24:35,599 con un montón de dependencias y de rollos 619 00:24:35,599 --> 00:24:36,539 y entonces cuando nos falla 620 00:24:36,539 --> 00:24:38,460 algo, nos pueden 621 00:24:38,460 --> 00:24:40,319 haber fallado mil cosas 622 00:24:40,319 --> 00:24:42,220 diferentes, luego ahora 623 00:24:42,220 --> 00:24:44,420 encontrar un error, ahora ya no es tan 624 00:24:44,420 --> 00:24:46,339 fácil, porque ahora cuando algo nos 625 00:24:46,339 --> 00:24:48,000 falla, vete a saber 626 00:24:48,000 --> 00:24:50,299 porque esto recuerdo 627 00:24:50,299 --> 00:24:52,599 que es lo que está aquí dentro 628 00:24:52,599 --> 00:24:54,059 y además resumido 629 00:24:54,059 --> 00:24:56,420 luego está todo lo que hay aquí, más todo lo que 630 00:24:56,420 --> 00:24:58,680 hay aquí, aquí hay millones 631 00:24:58,680 --> 00:25:00,519 de cosas y listo, entonces cuando te falla 632 00:25:00,519 --> 00:25:01,900 algo, pero 633 00:25:01,900 --> 00:25:04,319 tener una foto en la cabeza, un 634 00:25:04,319 --> 00:25:06,220 vistazo de con qué estamos trabajando 635 00:25:06,220 --> 00:25:08,940 y cuál es nuestra arquitectura y dónde está cada cosa 636 00:25:08,940 --> 00:25:10,779 y que esa foto no se nos olvide, 637 00:25:11,440 --> 00:25:12,079 pues nos ayuda. 638 00:25:12,700 --> 00:25:14,359 No solo para el viernes por la noche, 639 00:25:14,460 --> 00:25:15,619 nos ayuda porque damos un error. 640 00:25:15,920 --> 00:25:18,079 ¿El JTA y el JPA son la misma también? 641 00:25:19,299 --> 00:25:20,940 No, no, no, no, no. 642 00:25:20,940 --> 00:25:21,799 No tiene nada que ver. 643 00:25:22,819 --> 00:25:25,099 No, JTA es un módulo de gestión 644 00:25:25,099 --> 00:25:26,559 de transacciones que usa Hibernate. 645 00:25:26,660 --> 00:25:28,319 Es una dependencia, ¿vale? 646 00:25:28,759 --> 00:25:30,960 Y JPA es una API para la 647 00:25:30,960 --> 00:25:32,480 persistencia de Java, ¿vale? 648 00:25:33,380 --> 00:25:34,920 Vale, entonces, no sé si me he olvidado 649 00:25:34,920 --> 00:25:36,519 algo lo que quisiera contaros de la distribución. 650 00:25:36,660 --> 00:25:37,140 Yo creo que no. 651 00:25:51,369 --> 00:25:53,490 Vale. Entonces, 652 00:25:56,549 --> 00:25:57,130 JTA 653 00:25:57,130 --> 00:25:59,230 es un módulo muy complejo 654 00:25:59,230 --> 00:26:01,569 en realidad, porque es un módulo de gestión 655 00:26:01,569 --> 00:26:03,349 de transacciones a nivel de aplicaciones 656 00:26:03,349 --> 00:26:05,509 empresariales. En realidad 657 00:26:05,509 --> 00:26:07,410 no hay por qué usarlo, 658 00:26:07,869 --> 00:26:09,430 porque con JDBC ya podemos 659 00:26:09,430 --> 00:26:11,329 gestionar las transacciones como lo hemos hecho 660 00:26:11,329 --> 00:26:13,089 hasta ahora. O bien, 661 00:26:14,009 --> 00:26:15,390 haciéndose el commit, poniendo 662 00:26:15,390 --> 00:26:17,230 el set autocommit falso y luego haciendo 663 00:26:17,230 --> 00:26:18,829 el commit con el jdbc puro 664 00:26:18,829 --> 00:26:21,190 o bien con las anotaciones transactional 665 00:26:21,190 --> 00:26:23,470 eso no sería jdbc 666 00:26:23,470 --> 00:26:25,250 es una gestión de transacciones nuestra 667 00:26:25,250 --> 00:26:27,329 más manual, en aplicaciones empresariales 668 00:26:27,329 --> 00:26:28,930 ya complicadas 669 00:26:28,930 --> 00:26:31,109 este te ofrece muchísimas más 670 00:26:31,109 --> 00:26:33,170 posibilidades en funcionalidades 671 00:26:33,170 --> 00:26:34,970 que están distribuidas, hacer una transacción 672 00:26:34,970 --> 00:26:37,190 a diferentes niveles, pero bueno 673 00:26:37,190 --> 00:26:38,210 aparece ahí dentro 674 00:26:38,210 --> 00:26:41,410 porque para ese tipo de aplicaciones se puede usar 675 00:26:41,410 --> 00:26:43,269 vale, y ahora ya yo creo 676 00:26:43,269 --> 00:26:45,170 que vamos a empezar a programar, ¿verdad? 677 00:26:45,170 --> 00:26:55,400 No, no, no, no 678 00:26:55,400 --> 00:26:57,059 No explico mejor esto porque no lo sé 679 00:26:57,059 --> 00:26:58,859 Y porque 680 00:26:58,859 --> 00:27:06,460 A ver 681 00:27:06,460 --> 00:27:13,349 Que podría tirarme el pisto, pero para qué 682 00:27:13,349 --> 00:27:15,470 Si yo no conozco JTA 683 00:27:15,470 --> 00:27:17,130 En detalle, para qué voy a hablar de él 684 00:27:17,130 --> 00:27:19,589 Pero vamos que si quieres que te explique 685 00:27:19,589 --> 00:27:21,490 JTA en detalle, se te lo pido en detalle 686 00:27:21,490 --> 00:27:29,529 Vale, pero bueno 687 00:27:29,529 --> 00:27:32,150 ¿Entendéis el contexto 688 00:27:32,150 --> 00:27:33,190 De lo que estamos hablando? 689 00:27:34,650 --> 00:27:35,529 Y lo que vamos a hacer 690 00:27:35,529 --> 00:27:36,329 Y lo que vamos a trabajar 691 00:27:36,329 --> 00:27:41,589 Vale, pues entonces 692 00:27:41,589 --> 00:27:43,509 Venga, en estos 5 minutos vamos a hacer la parte 693 00:27:43,509 --> 00:27:46,130 No 694 00:27:46,130 --> 00:27:49,730 Venga, nuestro primer ejemplito 695 00:27:49,730 --> 00:27:51,549 nuestro primer ejemplito 696 00:27:51,549 --> 00:27:52,769 al menos que tenga una clave 697 00:27:52,769 --> 00:27:53,869 porque si no tiene una clave 698 00:27:53,869 --> 00:27:56,329 nuestro primer ejemplito 699 00:27:56,329 --> 00:27:58,009 con esta base de datos 700 00:27:58,009 --> 00:28:01,150 vamos a hacer un jpa puro 701 00:28:01,150 --> 00:28:03,789 y ya solo con eso 702 00:28:03,789 --> 00:28:05,170 ya salen bastantes 703 00:28:05,170 --> 00:28:06,390 cosas 704 00:28:06,390 --> 00:28:09,150 bastantes detallitos 705 00:28:09,150 --> 00:28:09,750 monos 706 00:28:09,750 --> 00:28:22,930 Bueno, pues ejecutáis ese script 707 00:28:22,930 --> 00:28:25,450 Os aparecerá una base de datos 708 00:28:25,450 --> 00:28:34,109 Pégalo en una pestañita SQL del Wordbench 709 00:28:34,109 --> 00:28:35,069 Y lo ejecutas 710 00:28:35,069 --> 00:28:40,839 y era 711 00:28:40,839 --> 00:28:52,880 esta base de datos 712 00:28:52,880 --> 00:29:15,230 a ver, ¿dónde estamos? 713 00:29:26,519 --> 00:29:28,759 hay que hacer lo de la ingeniería 714 00:29:28,759 --> 00:29:30,599 no, bueno, esto lo he hecho yo para que veamos 715 00:29:30,599 --> 00:29:31,740 la base de datos 716 00:29:31,740 --> 00:29:35,119 luego ya los ejemplos que os pasaré 717 00:29:35,119 --> 00:29:36,599 para hacer vosotros 718 00:29:36,599 --> 00:29:37,960 para que practiquéis vosotros 719 00:29:37,960 --> 00:29:39,960 con esto, con Spring Data, con lo que sea 720 00:29:39,960 --> 00:29:42,220 ya van a empezar a tener 5 o 6 tablas 721 00:29:42,220 --> 00:29:48,619 5 o 6 tablitas 722 00:29:48,619 --> 00:29:50,220 con relaciones de muchos a muchos 723 00:29:50,220 --> 00:29:52,279 y todo eso, es que si no, estoy insultando 724 00:29:52,279 --> 00:29:53,299 vuestra inteligencia 725 00:29:53,299 --> 00:29:55,920 ¿Quién me ha quitado la infusión? 726 00:29:56,539 --> 00:29:57,220 Pero si la has movido 727 00:29:57,220 --> 00:29:58,299 ¿Yo a dónde? 728 00:29:58,299 --> 00:30:19,700 Vale, una única clave ajena 729 00:30:19,700 --> 00:30:20,779 Bueno 730 00:30:20,779 --> 00:30:25,259 Pues ahora vamos a hacer una aplicación 731 00:30:25,259 --> 00:30:30,799 que recupere empleados con cierto nombre, 732 00:30:31,319 --> 00:30:33,539 los departamentos con más de tantos empleados. 733 00:30:33,720 --> 00:30:36,420 Solo con esto ya podemos hacer un montón de historias. 734 00:30:37,240 --> 00:30:38,940 Pues venga, como ya tenéis la base de datos hecha, 735 00:30:39,779 --> 00:30:46,920 ahora vamos a abrir el Eclipse Normalucho y Corrientucho. 736 00:30:47,559 --> 00:30:50,079 Porque va a ser una aplicación de escritorio ahora mismo, 737 00:30:50,079 --> 00:30:51,079 no vamos a hacerle... 738 00:30:51,079 --> 00:30:56,680 lo que se acaba de hacer en Spring 739 00:30:56,680 --> 00:30:57,779 lo has aprendido 740 00:30:57,779 --> 00:31:00,740 por lo cual cuando le pongamos la capa de Spring 741 00:31:00,740 --> 00:31:02,619 a esto, se la podrás poner 742 00:31:02,619 --> 00:31:04,660 automáticamente, lo que pasa es que ya se la vamos a poner 743 00:31:04,660 --> 00:31:05,859 con Spring Data JPA 744 00:31:05,859 --> 00:31:12,819 es para que aprendas Spring y Spring.org 745 00:31:12,819 --> 00:31:16,160 pero como que pana 746 00:31:16,160 --> 00:31:18,720 pero a ver, es que de verdad 747 00:31:18,720 --> 00:31:19,700 en el día a día aquí 748 00:31:19,700 --> 00:31:27,799 Pero vosotros qué creéis que es la vida 749 00:31:27,799 --> 00:31:39,720 Hay muchas cosas en la vida 750 00:31:39,720 --> 00:31:40,259 ¿Vale? 751 00:31:40,259 --> 00:31:42,259 Entonces, ¿cuándo...? 752 00:31:42,920 --> 00:31:47,859 Bueno, porque 753 00:31:47,859 --> 00:31:50,119 cuando no vamos a hacer un proyecto con sprint 754 00:31:50,119 --> 00:31:52,420 pues hombre, es más 755 00:31:52,420 --> 00:31:53,180 cómodo el otro 756 00:31:53,180 --> 00:31:58,740 hombre, con el sprint tool 757 00:31:58,740 --> 00:32:00,079 puedes hacer proyectos sin sprint 758 00:32:00,079 --> 00:32:02,660 por supuesto, es un eclipse normal y corriente 759 00:32:02,660 --> 00:32:04,279 a ver, si solo queréis 760 00:32:04,279 --> 00:32:06,180 usar el sprint solamente, si queréis 761 00:32:06,180 --> 00:32:06,720 me da igual 762 00:32:06,720 --> 00:32:10,440 lo único que decía es que este proyecto que vamos a hacer 763 00:32:10,440 --> 00:32:11,339 ahora es sin sprint 764 00:32:11,339 --> 00:32:14,160 pero lo que forma parte 765 00:32:14,160 --> 00:32:15,779 de vuestro desarrollo como seres humanos 766 00:32:15,779 --> 00:32:18,240 el no perderos en la vida 767 00:32:18,240 --> 00:32:18,779 el 768 00:32:18,779 --> 00:32:22,039 claro, el 769 00:32:22,039 --> 00:32:22,619 yo que sé 770 00:32:22,619 --> 00:32:26,099 el manejaros en las situaciones, el no quedaros 771 00:32:26,099 --> 00:32:27,480 desconcertados por cualquier cosa 772 00:32:27,480 --> 00:32:29,380 yo que sé 773 00:32:29,380 --> 00:32:31,819 venga 774 00:32:31,819 --> 00:32:33,720 abrimos 775 00:32:33,720 --> 00:32:35,759 o el que 776 00:32:35,759 --> 00:32:38,039 o el sprint tools, el que te dé la gana 777 00:32:38,039 --> 00:32:39,960 vamos a hacer un proyecto 778 00:32:39,960 --> 00:32:40,940 sin sprint 779 00:32:40,940 --> 00:33:03,849 ala, volvemos aquí 780 00:33:03,849 --> 00:33:11,890 vale 781 00:33:11,890 --> 00:33:20,210 venga, pues este lo vamos a hacer 782 00:33:20,210 --> 00:33:22,549 este como es el primero 783 00:33:22,549 --> 00:33:24,549 lo vamos a hacer de cero, luego ya sabéis que al final 784 00:33:24,549 --> 00:33:26,390 la acabamos copiando, pegando y de todo. 785 00:33:27,009 --> 00:33:27,849 Pues venga. 786 00:33:31,029 --> 00:33:31,230 ¿Eh? 787 00:33:32,490 --> 00:33:34,109 Claro, este desde cero. 788 00:33:35,230 --> 00:33:36,509 Venga, proyecto de 789 00:33:36,509 --> 00:33:37,210 Mave. 790 00:33:43,190 --> 00:33:45,609 ¿Qué grupo queremos? El de siempre. 791 00:33:45,609 --> 00:33:47,829 ¿Por qué no es mejor 792 00:33:47,829 --> 00:33:49,089 que ponía el número tanto? 793 00:33:49,869 --> 00:33:51,210 Porque la verdad es que el número 794 00:33:51,210 --> 00:33:52,309 da un 2 y un 2. 795 00:33:53,670 --> 00:33:55,789 No, el convenio 796 00:33:55,789 --> 00:33:57,869 ponerlo así, siempre, porque 797 00:33:57,869 --> 00:33:59,430 de toda la vida. 798 00:34:00,490 --> 00:34:01,930 Bueno, lo sé, igual me equivoqué. 799 00:34:02,369 --> 00:34:02,609 Dime. 800 00:34:10,300 --> 00:34:12,199 ¿Dónde? En la anterior, dices. 801 00:34:16,380 --> 00:34:17,679 Un proyecto normal. 802 00:34:18,559 --> 00:34:20,139 Aquí lo que pasa es que me ha añadido a mi working set. 803 00:34:20,219 --> 00:34:21,679 Si tú no tienes working set, eso 804 00:34:21,679 --> 00:34:23,960 no lo marcas, claro. 805 00:34:25,280 --> 00:34:25,599 Vale. 806 00:34:25,900 --> 00:34:27,880 Unidad didáctica 3. 807 00:34:28,000 --> 00:34:30,239 JPA 808 00:34:30,239 --> 00:34:33,000 empleados 809 00:34:33,000 --> 00:34:34,619 departamentos 810 00:34:34,619 --> 00:34:36,599 clase 811 00:34:36,599 --> 00:34:42,079 y ahora 812 00:34:42,079 --> 00:34:43,880 ¿para qué vamos a usar? 813 00:34:44,019 --> 00:34:45,519 ahora sí que os va a volar la cabeza 814 00:34:45,519 --> 00:34:47,739 bueno, ahora no, el próximo día 815 00:34:47,739 --> 00:34:51,079 pero a ver, no me digáis 816 00:34:51,079 --> 00:34:51,639 pero sí 817 00:34:51,639 --> 00:34:53,900 lo he hecho mil veces 818 00:34:53,900 --> 00:34:56,079 y ahora resulta que 819 00:34:56,079 --> 00:35:01,239 crear un proyecto 820 00:35:01,239 --> 00:35:02,360 se acabó 821 00:35:02,360 --> 00:35:04,079 y ya se han muerto 822 00:35:04,079 --> 00:35:07,119 pues os va a volar la cabeza ahora 823 00:35:07,119 --> 00:35:09,119 porque vamos a usar este proyecto 824 00:35:09,119 --> 00:35:10,099 JPA puro 825 00:35:10,099 --> 00:35:12,900 para darle un diseño guay 826 00:35:12,900 --> 00:35:15,099 con clases genéricas 827 00:35:15,099 --> 00:35:16,440 con dados genéricos 828 00:35:16,440 --> 00:35:21,500 el proyecto, yo lo he llamado así 829 00:35:21,500 --> 00:35:22,800 tú llámalo como quieras 830 00:35:22,800 --> 00:35:24,900 lo llamo así 831 00:35:24,900 --> 00:35:26,679 pero si habéis hablado virtual, si no me lío. 832 00:35:27,579 --> 00:35:28,420 Vale, pues venga. 833 00:35:32,679 --> 00:35:35,300 Venga, nuestro, ¿qué es lo primero que hacemos siempre? 834 00:35:35,480 --> 00:35:36,219 El modelo. 835 00:35:37,519 --> 00:35:39,400 Lo primero que hacemos siempre es el modelo. 836 00:35:40,400 --> 00:35:41,860 Ah, bueno, las dependencias, tienes razón. 837 00:35:42,699 --> 00:35:43,300 Sí, pero bueno. 838 00:35:46,820 --> 00:35:49,000 Hasta, ¿cómo me llaman? 839 00:35:49,380 --> 00:35:49,820 Model. 840 00:35:50,920 --> 00:35:53,119 Vale, según me las vaya pidiendo y así. 841 00:35:54,900 --> 00:35:58,659 La de hibernate y el driver son las que vamos a necesitar seguro 842 00:35:58,659 --> 00:36:00,699 Ahora las ponemos cuando las vaya pidiendo 843 00:36:00,699 --> 00:36:02,920 Venga, pues a ver, el modelo 844 00:36:02,920 --> 00:36:05,739 Pues el modelo, uno se mira aquí esto 845 00:36:05,739 --> 00:36:07,260 Y dice, pues dos entidades 846 00:36:07,260 --> 00:36:09,599 Departamento y empleado 847 00:36:09,599 --> 00:36:11,679 Pues ya está, tan ricamente 848 00:36:11,679 --> 00:36:16,449 Se hace una nueva clase 849 00:36:16,449 --> 00:36:19,389 Empleado 850 00:36:19,389 --> 00:36:22,809 Y se hace una nueva clase departamento 851 00:36:22,809 --> 00:36:35,539 Entonces, a ver, ¿qué queremos que tengan? 852 00:36:35,840 --> 00:36:38,719 Pues departamento va a tener 853 00:36:38,719 --> 00:36:40,360 Su id entero 854 00:36:40,360 --> 00:36:42,360 Y su nombre string 855 00:36:42,360 --> 00:36:43,900 Pues ya está 856 00:36:43,900 --> 00:36:47,000 El departamento 857 00:36:47,000 --> 00:36:47,719 Va a tener 858 00:36:47,719 --> 00:36:51,219 Esto queda como más profesional 859 00:36:51,219 --> 00:36:52,559 Poner el proper 860 00:36:52,559 --> 00:37:01,289 Vale, vamos a poner ahora mismo 861 00:37:01,289 --> 00:37:02,670 Los getter y setter y ya está 862 00:37:02,670 --> 00:37:04,690 Luego ya le iremos completando 863 00:37:04,690 --> 00:37:07,590 No hombre, se acaba 864 00:37:07,590 --> 00:37:08,750 Hay 40, la clase 865 00:37:08,750 --> 00:37:10,730 No, no, no, no, hay 40 866 00:37:10,730 --> 00:37:13,210 Sí, vale 867 00:37:13,210 --> 00:37:17,190 Empleado 868 00:37:17,190 --> 00:37:19,550 Empleado 869 00:37:19,550 --> 00:37:20,369 Que tiene 870 00:37:20,369 --> 00:37:23,550 Su ID entero 871 00:37:23,550 --> 00:37:25,250 Su nombre string 872 00:37:25,250 --> 00:37:28,110 Y luego tiene esa clave ajena 873 00:37:28,110 --> 00:37:36,559 Su ID entero 874 00:37:36,559 --> 00:37:40,380 El nombre de empleado 875 00:37:40,380 --> 00:37:41,539 Que es string 876 00:37:41,539 --> 00:37:43,360 Y ahora tiene este campo 877 00:37:43,360 --> 00:37:44,320 Que de alguna manera 878 00:37:44,320 --> 00:37:46,500 Tenemos que mapear aquí 879 00:37:46,500 --> 00:37:50,019 Pero aquí lo que jamás haríamos 880 00:37:50,019 --> 00:37:51,500 Sería poner un campo entero 881 00:37:51,500 --> 00:37:52,340 Y de departamento 882 00:37:52,340 --> 00:37:55,599 No, porque para qué queremos 883 00:37:55,599 --> 00:37:57,079 Entonces ORM es capas 884 00:37:57,079 --> 00:37:59,119 Para manejar luego nosotros 885 00:37:59,119 --> 00:38:01,360 El ir de un objeto a otro no tendría sentido 886 00:38:01,360 --> 00:38:03,000 Entonces el empleado 887 00:38:03,000 --> 00:38:05,079 Pertenece a un departamento 888 00:38:05,079 --> 00:38:06,320 Y como tal 889 00:38:06,320 --> 00:38:09,199 Estará aquí su departamento 890 00:38:09,199 --> 00:38:17,000 Pues los nombres rusos 891 00:38:17,000 --> 00:38:24,190 Vale, con sus getter y setter 892 00:38:24,190 --> 00:38:34,260 Vale, entonces, ahora mismo las vamos a dejar así 893 00:38:34,260 --> 00:38:35,860 O sea, ahora mismo 894 00:38:35,860 --> 00:38:37,739 Me refiero a estos próximos dos segundos 895 00:38:37,739 --> 00:38:40,039 Sí, pero 896 00:38:40,039 --> 00:38:41,519 Ahora se la vamos a ir pidiendo 897 00:38:41,519 --> 00:38:44,420 Vale, entonces, ahora mismo esto se nos quedaría así 898 00:38:44,420 --> 00:38:45,519 Ahora vamos a empezar a 899 00:38:45,519 --> 00:38:47,619 Configurar 900 00:38:47,619 --> 00:38:50,260 Estas entidades 901 00:38:50,260 --> 00:38:52,039 Para que se mapeen exactamente 902 00:38:52,679 --> 00:38:54,039 Con las tablas correspondientes 903 00:38:54,840 --> 00:38:56,260 Según 904 00:38:56,260 --> 00:38:58,000 Las 905 00:38:58,000 --> 00:38:59,880 Reglas de JPA 906 00:38:59,880 --> 00:39:02,619 Bueno, pues cada tabla es una entidad 907 00:39:02,619 --> 00:39:04,739 Luego lo primero que necesitamos es 908 00:39:04,739 --> 00:39:08,019 Anotarlas con entity 909 00:39:08,019 --> 00:39:10,760 Cada una de ellas 910 00:39:10,760 --> 00:39:12,260 Entity 911 00:39:12,260 --> 00:39:14,039 Y entity 912 00:39:14,039 --> 00:39:20,760 Vale, entonces 913 00:39:20,760 --> 00:39:23,639 Estas anotaciones, como todas las anotaciones 914 00:39:23,639 --> 00:39:24,420 Son clases 915 00:39:24,420 --> 00:39:27,059 Que habrá que importar 916 00:39:27,059 --> 00:39:28,280 Vale, entonces aquí 917 00:39:28,280 --> 00:39:30,519 Necesitamos 918 00:39:30,519 --> 00:39:32,860 Ya antes las dependencias 919 00:39:32,860 --> 00:39:33,739 Vale 920 00:39:33,739 --> 00:40:02,179 Pues entonces, a ver, vale, las dependencias necesitamos hibernate, que es la implementación de JPA, y necesitamos el driver, ¿vale? 921 00:40:02,920 --> 00:40:14,519 Entonces, las podéis buscar en el repositorio de Maven, o las voy a copiar yo aquí. 922 00:40:14,519 --> 00:40:23,960 ¿Qué le pasa a este ratón? 923 00:40:24,579 --> 00:40:30,960 Se ha muerto el ratón 924 00:40:30,960 --> 00:40:33,679 El mejor momento 925 00:40:33,679 --> 00:40:42,480 Ahí está 926 00:40:42,480 --> 00:40:43,519 Vale 927 00:40:43,519 --> 00:40:58,280 Entonces 928 00:40:58,280 --> 00:41:00,719 Y le vamos a quitar esto de aquí 929 00:41:00,719 --> 00:41:07,309 Ah, y otra cosa que no hemos hecho 930 00:41:07,309 --> 00:41:09,429 Es cambiar 931 00:41:09,429 --> 00:41:12,630 La máquina virtual 932 00:41:12,630 --> 00:41:14,750 Que se me ha quedado en la 8 933 00:41:14,750 --> 00:41:23,300 Y ahora 934 00:41:23,300 --> 00:41:27,880 El nivel de compilación 935 00:41:27,880 --> 00:41:29,579 Aquí 936 00:41:29,579 --> 00:41:39,119 Driver MySQL 937 00:41:39,119 --> 00:41:41,019 Ahora lo pongo de todas maneras 938 00:41:41,019 --> 00:41:44,980 Vale, entonces un segundito 939 00:41:44,980 --> 00:41:46,440 Voy a ver cuál me ofrece 940 00:41:46,440 --> 00:41:48,960 A ver si la que me ofrece es la buena 941 00:41:48,960 --> 00:41:50,360 O vamos a necesitar 942 00:41:50,360 --> 00:41:57,860 Vale, sí, me ofrece la buena, la de la carta 943 00:41:57,860 --> 00:41:59,440 Vale, pues entonces 944 00:41:59,440 --> 00:42:01,559 las dependencias que he puesto 945 00:42:01,559 --> 00:42:03,440 son 946 00:42:03,440 --> 00:42:06,610 estas dos 947 00:42:06,610 --> 00:42:09,230 la del ORM de Hibernate 948 00:42:09,230 --> 00:42:10,989 que implementa el JPA y el driver 949 00:42:10,989 --> 00:42:12,769 ¿vale? 950 00:42:12,929 --> 00:42:14,789 con eso ya se puede importar de 951 00:42:14,789 --> 00:42:16,710 Jakarta, porque recordad que 952 00:42:16,710 --> 00:42:19,130 JPA es estándar de 953 00:42:19,130 --> 00:42:19,429 Java 954 00:42:19,429 --> 00:42:23,090 entonces, como es a partir 955 00:42:23,090 --> 00:42:25,150 de cierta, no es el JavaX 956 00:42:25,150 --> 00:42:27,389 Persistence Entity 957 00:42:27,389 --> 00:42:28,550 sino el Jakarta 958 00:42:28,550 --> 00:42:29,369 No existe 959 00:42:29,369 --> 00:42:42,010 Esta versión no es la más actualizada 960 00:42:42,010 --> 00:42:43,530 De Ibernate, podríamos poner 961 00:42:43,530 --> 00:42:45,969 No es la más actualizada, pero bueno, se puede cambiar ahí 962 00:42:45,969 --> 00:42:47,829 Y ya está, tampoco hay mucho 963 00:42:47,829 --> 00:42:54,900 Que ya no vamos 964 00:42:54,900 --> 00:42:56,719 Que ya no vamos, ¿no? 965 00:42:57,019 --> 00:42:59,480 No, que tengo que irme al baño, que es que tengo que presentar ahora 966 00:42:59,480 --> 00:43:00,559 Dale, dale, dale 967 00:43:00,559 --> 00:43:02,219 Ah, que tienes presentación de videojuegos 968 00:43:02,219 --> 00:43:04,940 Pues venga, pues nada, vamos a ir recogiendo 969 00:43:04,940 --> 00:43:09,840 Vale, pero las podíais coger de Maven también 970 00:43:09,840 --> 00:43:15,360 Ahí está 971 00:43:15,360 --> 00:43:18,039 ¿Cuál era la determinación? 972 00:43:19,219 --> 00:43:20,179 Esas dos que están ahí 973 00:43:20,179 --> 00:43:21,380 Vale 974 00:43:21,380 --> 00:43:30,940 Te lo dejo ya 975 00:43:30,940 --> 00:43:33,199 Te lo dejo ya 976 00:43:33,199 --> 00:43:34,059 Ya lo conocía 977 00:43:34,059 --> 00:43:46,420 Vale 978 00:43:46,420 --> 00:43:50,119 Bueno, pues tenemos una clase preciosa 979 00:43:50,119 --> 00:43:50,840 El próximo día 980 00:43:50,840 --> 00:43:54,219 La más bonita del mundo 981 00:43:54,219 --> 00:43:55,219 ¿Qué? 982 00:43:56,219 --> 00:43:58,780 Estaba creando la tabla esta 983 00:43:58,780 --> 00:44:01,579 De empleado y departamento 984 00:44:01,579 --> 00:44:02,599 Que tienes ahí 985 00:44:02,599 --> 00:44:02,940 Sí 986 00:44:02,940 --> 00:44:05,960 Yo voy a meter por SQL 987 00:44:05,960 --> 00:44:06,519 Pero 988 00:44:06,519 --> 00:44:09,099 ¿Qué SQL explicaste ahorita? 989 00:44:09,340 --> 00:44:10,360 ¿Cómo? ¿El qué? ¿El qué? 990 00:44:10,840 --> 00:44:13,239 Para meterlo en el código SQL 991 00:44:13,239 --> 00:44:15,840 A ver, no mediante el código SQL 992 00:44:15,840 --> 00:44:17,219 Que si tú 993 00:44:17,219 --> 00:44:18,780 Abres el proyecto 994 00:44:18,780 --> 00:44:20,340 Ahí en las sentencias 995 00:44:20,340 --> 00:44:21,639 Pues lo tienes, por ejemplo 996 00:44:21,639 --> 00:44:24,039 Aquí donde lo teníamos 997 00:44:24,039 --> 00:44:24,940 Espérate 998 00:44:24,940 --> 00:44:26,519 Estaba aquí en 999 00:44:26,519 --> 00:44:28,059 Ay, no, este no 1000 00:44:28,059 --> 00:44:31,940 Vale 1001 00:44:31,940 --> 00:44:37,480 este que trabajaba 1002 00:44:37,480 --> 00:44:38,679 con transacciones 1003 00:44:38,679 --> 00:44:41,260 pues aquí el de implementación 1004 00:44:41,260 --> 00:44:43,239 tenía, mira ves 1005 00:44:43,239 --> 00:44:45,099 aquí tienes las propiedades 1006 00:44:45,099 --> 00:44:47,780 la tabla, ID, escaparate 1007 00:44:47,780 --> 00:44:49,059 NIF comprador 1008 00:44:49,059 --> 00:44:51,219 coche y color 1009 00:44:51,219 --> 00:44:51,719 estas son 1010 00:44:51,719 --> 00:44:57,179 para meterlas ahí 1011 00:44:57,179 --> 00:44:57,739 en MySQL 1012 00:44:57,739 --> 00:45:01,219 ¿cómo para meterlas? 1013 00:45:01,219 --> 00:45:03,239 A ver, el script está 1014 00:45:03,239 --> 00:45:05,340 Ah 1015 00:45:05,340 --> 00:45:08,699 Pues te haces aquí un 1016 00:45:08,699 --> 00:45:10,079 SQL 1017 00:45:10,079 --> 00:45:14,219 Y aquí copias y pegas 1018 00:45:14,219 --> 00:45:17,619 No sé 1019 00:45:17,619 --> 00:45:20,440 No, no, no 1020 00:45:25,440 --> 00:45:26,760 Pues no sé decirte 1021 00:45:26,760 --> 00:45:44,900 A ver, Cecilia es un nombre 1022 00:45:44,900 --> 00:45:46,679 que está de moda últimamente 1023 00:45:46,679 --> 00:45:49,159 Cecilia, sí 1024 00:45:49,159 --> 00:45:52,639 Yo he conocido de mi edad Celias 1025 00:45:52,639 --> 00:45:55,659 Bueno, Celias sí que hay bastantes 1026 00:45:55,659 --> 00:46:01,460 Yo creo que he conocido a alguna niña 1027 00:46:01,460 --> 00:46:10,860 Sí, Virginia, sí 1028 00:46:10,860 --> 00:46:17,260 Y esto sin parar