1 00:00:00,000 --> 00:00:01,600 Vale 2 00:00:01,600 --> 00:00:04,299 Pues nuestro modelo 3 00:00:04,299 --> 00:00:05,780 Ya lo empezamos a hacer el otro día 4 00:00:05,780 --> 00:00:07,620 Empleado 5 00:00:07,620 --> 00:00:08,599 Venga 6 00:00:08,599 --> 00:00:11,279 Empleado tendrá 7 00:00:11,279 --> 00:00:14,359 Su clave primaria ID, su nombre 8 00:00:14,359 --> 00:00:15,099 Y luego 9 00:00:15,099 --> 00:00:18,239 Por tener una clave ajena que nos lleva 10 00:00:18,239 --> 00:00:19,140 A departamento 11 00:00:19,140 --> 00:00:21,699 Entonces el empleado que tiene dentro 12 00:00:21,699 --> 00:00:23,899 Tiene un objeto departamento 13 00:00:23,899 --> 00:00:26,219 Vale, y esto es algo natural 14 00:00:26,219 --> 00:00:27,100 No tenemos que 15 00:00:27,100 --> 00:00:30,620 esto no es de JPA 16 00:00:30,620 --> 00:00:32,320 sería el modelo natural 17 00:00:32,320 --> 00:00:35,140 vale, los getter y los setter 18 00:00:35,140 --> 00:00:36,100 y no hicimos nada más 19 00:00:36,100 --> 00:00:39,000 bueno, entonces 20 00:00:39,000 --> 00:00:41,520 ahora 21 00:00:41,520 --> 00:00:44,859 lo que necesitamos es hacer el mapeo 22 00:00:44,859 --> 00:00:46,939 para que la herramienta 23 00:00:46,939 --> 00:00:48,520 hibernate que vamos a poner por debajo 24 00:00:48,520 --> 00:00:50,619 implementando JPA sea capaz 25 00:00:50,619 --> 00:00:52,700 ella sola de hacer automáticamente 26 00:00:52,700 --> 00:00:54,600 el traslado y cuando yo haga un get 27 00:00:54,600 --> 00:00:56,479 de empleado, ella solita 28 00:00:56,479 --> 00:00:58,259 rellene todo, rellene 29 00:00:58,259 --> 00:01:00,240 el ID, el nombre, el departamento 30 00:01:00,240 --> 00:01:02,280 por ejemplo, ¿vale? Entonces tenemos que hacer 31 00:01:02,280 --> 00:01:04,340 un mapeo, configurar 32 00:01:04,340 --> 00:01:06,359 tenemos que configurar un mapeo para que nuestra 33 00:01:06,359 --> 00:01:08,280 herramienta JPA con 34 00:01:08,280 --> 00:01:10,439 hibernate a respuestas 35 00:01:10,439 --> 00:01:12,180 de una sentencia simple, ¡puf! 36 00:01:12,680 --> 00:01:14,780 construya toda la estructura 37 00:01:14,780 --> 00:01:15,799 desde la base de datos 38 00:01:15,799 --> 00:01:18,299 olvidándome yo de SELE, de 39 00:01:18,299 --> 00:01:19,519 SQL y de leches, bueno 40 00:01:19,519 --> 00:01:22,180 entonces vamos a mencionar 4, 5, 6 las 41 00:01:22,180 --> 00:01:24,140 anotaciones básicas de JPA 42 00:01:24,140 --> 00:01:26,319 que hay poco más que saber para poder 43 00:01:26,319 --> 00:01:27,879 hacer cualquier mapeo en realidad 44 00:01:27,879 --> 00:01:30,000 la básica 45 00:01:30,000 --> 00:01:32,079 entity, ¿vale? la anotación 46 00:01:32,079 --> 00:01:34,340 entity es la básica que define 47 00:01:34,340 --> 00:01:36,379 que esto es una entidad 48 00:01:36,379 --> 00:01:37,340 JPA 49 00:01:37,340 --> 00:01:40,560 una entidad que va a gestionar 50 00:01:40,560 --> 00:01:42,780 mi herramienta 51 00:01:42,780 --> 00:01:43,739 de persistencia 52 00:01:43,739 --> 00:01:45,920 mi contexto de persistencia 53 00:01:45,920 --> 00:01:49,719 ¿vale? porque todo esto lo mencionamos el otro 54 00:01:49,719 --> 00:01:51,239 día, estas herramientas 55 00:01:51,239 --> 00:01:53,219 cuando las usamos 56 00:01:53,219 --> 00:01:56,019 instanciamos un contexto de persistencia 57 00:01:56,019 --> 00:01:59,200 Ese contexto de persistencia 58 00:01:59,200 --> 00:02:03,439 Incluirá los objetos que queramos que sean persistentes 59 00:02:03,439 --> 00:02:06,200 Que no tienen por qué ser todos los de mi aplicación 60 00:02:06,200 --> 00:02:07,640 Habrá objetos que irán por libre 61 00:02:07,640 --> 00:02:09,879 Que están desconectados de la base de datos 62 00:02:09,879 --> 00:02:12,539 Y objetos persistentes que sí que queremos 63 00:02:12,539 --> 00:02:14,300 Que estén conectados con la base de datos 64 00:02:14,300 --> 00:02:18,860 ¿Vale? Pues esto es una clase 65 00:02:18,860 --> 00:02:20,560 De la cual instanciaremos objetos 66 00:02:20,560 --> 00:02:22,979 Que querremos meter en ese contexto de persistencia 67 00:02:22,979 --> 00:02:25,259 Para que la herramienta los gestione, los sincronice, etc. 68 00:02:25,259 --> 00:02:27,199 Pues entonces hay anotación entity 69 00:02:27,199 --> 00:02:28,919 Que es la 70 00:02:28,919 --> 00:02:31,240 La básica, ¿vale? 71 00:02:31,319 --> 00:02:32,199 Eso es para la persistent 72 00:02:32,199 --> 00:02:35,919 Para que JPA 73 00:02:35,919 --> 00:02:37,939 Entienda que esto es una entidad 74 00:02:37,939 --> 00:02:39,900 Que tiene que poder 75 00:02:39,900 --> 00:02:42,020 Gestionar y mapear con la base de datos 76 00:02:42,020 --> 00:02:43,900 Vale, entonces entity es una 77 00:02:43,900 --> 00:02:45,879 Anotación que se importa de 78 00:02:45,879 --> 00:02:48,039 La API JPA, que la API JPA 79 00:02:48,039 --> 00:02:49,900 Pues está en Jakarta, persistence 80 00:02:49,900 --> 00:02:52,120 Si estuviéramos en la versión 81 00:02:52,120 --> 00:02:53,639 De hace un tiempecito 82 00:02:53,639 --> 00:02:55,919 en lugar de Jakarta Persistence estaría 83 00:02:55,919 --> 00:02:57,400 JavaX Persistence 84 00:02:57,400 --> 00:02:59,680 porque a veces los import en función de si has 85 00:02:59,680 --> 00:03:01,840 actualizado la máquina o no, te ofrecen uno u otro 86 00:03:01,840 --> 00:03:03,000 pero 87 00:03:03,000 --> 00:03:05,740 asumid en vuestra cabeza como ya asuméis 88 00:03:05,740 --> 00:03:07,960 JavaX y Jakarta es como si fuera 89 00:03:07,960 --> 00:03:09,840 lo mismo, Jakarta es la 90 00:03:09,840 --> 00:03:11,780 versión que la sustituye, pero esencialmente 91 00:03:11,780 --> 00:03:12,300 es lo mismo 92 00:03:12,300 --> 00:03:14,020 vale, entonces 93 00:03:14,020 --> 00:03:17,099 al poner entity ya 94 00:03:17,099 --> 00:03:18,919 JPA asume 95 00:03:18,919 --> 00:03:21,840 que esto se va a corresponder con una tabla 96 00:03:21,840 --> 00:03:23,520 que se llama empleado 97 00:03:23,520 --> 00:03:25,819 las mayúsculas como si no existieran 98 00:03:25,819 --> 00:03:28,020 porque en SQL no las distingue 99 00:03:28,020 --> 00:03:28,860 mírame 100 00:03:28,860 --> 00:03:34,400 pues las que pusimos el otro día 101 00:03:34,400 --> 00:03:35,819 y el proyecto está subido 102 00:03:35,819 --> 00:03:38,800 un segundín Dani, espérate, están aquí 103 00:03:38,800 --> 00:03:46,520 es el conector de Java 104 00:03:46,520 --> 00:03:47,520 va a ser imprescindible 105 00:03:47,520 --> 00:03:49,280 y la de Hibernate 106 00:03:49,280 --> 00:03:51,280 ¿vale? 107 00:03:52,939 --> 00:03:54,379 es decir, el conector 108 00:03:54,379 --> 00:03:56,319 porque todo esto está apoyado sobre 109 00:03:56,319 --> 00:03:58,300 JDBC, recordad, esto 110 00:03:58,300 --> 00:03:59,939 no sustituye a JDBC 111 00:03:59,939 --> 00:04:01,939 esto es una capa por encima 112 00:04:01,939 --> 00:04:03,620 que usa por debajo JDBC 113 00:04:03,620 --> 00:04:06,539 no lo sustituye porque JDBC es imprescindible 114 00:04:06,539 --> 00:04:08,139 entonces el driver 115 00:04:08,139 --> 00:04:08,840 hace falta 116 00:04:08,840 --> 00:04:12,360 y luego la dependencia esta 117 00:04:12,360 --> 00:04:14,620 nos hace falta pues porque es la implementación 118 00:04:14,620 --> 00:04:15,300 de JPA 119 00:04:15,300 --> 00:04:28,040 entonces si no es igual 120 00:04:28,040 --> 00:04:30,279 Pues tú haces una anotación 121 00:04:30,279 --> 00:04:31,800 Para indicar el nombre 122 00:04:31,800 --> 00:04:32,920 Que es la anotación 123 00:04:32,920 --> 00:04:36,540 ¿Por qué no me escribe esto? 124 00:04:36,699 --> 00:04:38,220 Ah, table 125 00:04:38,220 --> 00:04:39,160 ¿Vale? 126 00:04:47,480 --> 00:04:48,740 Table que tiene 127 00:04:48,740 --> 00:04:51,879 Por ejemplo, pues eso 128 00:04:51,879 --> 00:04:53,839 Imagínate que se llama empleados 129 00:04:53,839 --> 00:04:58,779 Claro, si no se llama así 130 00:04:58,779 --> 00:05:02,819 Esto asociad a que es muy parecida a la idea de Jaxbe 131 00:05:02,819 --> 00:05:04,500 Lo que pasa es que son otras anotaciones 132 00:05:04,500 --> 00:05:05,939 Y en lugar de mapear con un XML 133 00:05:05,939 --> 00:05:07,120 Mapea con una tabla 134 00:05:07,120 --> 00:05:10,980 ¿Vale? Esta es opcional solo si cambia el nombre 135 00:05:10,980 --> 00:05:14,500 Entonces, en mi caso en particular 136 00:05:14,500 --> 00:05:16,379 La tabla se llama empleado 137 00:05:16,379 --> 00:05:19,279 Entonces la voy a dejar así para que funcione 138 00:05:19,279 --> 00:05:23,439 Aunque podría quitarla porque es el mismo nombre 139 00:05:23,439 --> 00:05:29,610 Entonces 140 00:05:29,610 --> 00:05:36,740 Si yo ya no anoto nada más 141 00:05:36,740 --> 00:05:37,899 No anoto nada más 142 00:05:37,899 --> 00:05:41,639 Pues JPA asume que hay una tabla que se llama empleados 143 00:05:41,639 --> 00:05:43,860 con campos exactamente 144 00:05:43,860 --> 00:05:44,920 con este nombre 145 00:05:44,920 --> 00:05:47,639 sin ninguna característica 146 00:05:47,639 --> 00:05:54,899 me deja también 147 00:05:54,899 --> 00:05:56,459 importar una vez que 148 00:05:56,459 --> 00:05:59,759 ya, pero no, no, no 149 00:05:59,759 --> 00:06:01,779 bueno, es que no tenga nada que ver 150 00:06:01,779 --> 00:06:03,480 eso es al margen de JPA 151 00:06:03,480 --> 00:06:05,439 trabajar, que lo puedes trabajar 152 00:06:05,439 --> 00:06:07,879 nosotros estamos en 153 00:06:07,879 --> 00:06:09,459 usando la API JPA 154 00:06:09,459 --> 00:06:11,300 que es la que tenemos que usar, es la que usa 155 00:06:11,300 --> 00:06:13,779 Spring cuando se mueve la capa por encima 156 00:06:13,779 --> 00:06:17,519 Claro, pero es que Hibernate 157 00:06:17,519 --> 00:06:18,439 tiene dos usos 158 00:06:18,439 --> 00:06:21,579 el uso a través de JPA 159 00:06:21,579 --> 00:06:23,579 o el uso directo 160 00:06:23,579 --> 00:06:25,399 y el estándar es el uso 161 00:06:25,399 --> 00:06:26,259 a través de JPA 162 00:06:26,259 --> 00:06:29,480 y de hecho Spring 163 00:06:29,480 --> 00:06:31,480 es otra capa sobre JPA 164 00:06:31,480 --> 00:06:33,339 que a su vez JPA va sobre Hibernate 165 00:06:33,339 --> 00:06:34,699 Hibernate sobre JDBC 166 00:06:34,699 --> 00:06:36,959 y hay capas hasta el infinito 167 00:06:36,959 --> 00:06:39,079 Vale, entonces 168 00:06:39,079 --> 00:06:40,839 si no se pone nada más 169 00:06:40,839 --> 00:06:43,720 JPA 170 00:06:43,720 --> 00:06:45,420 asumiría 171 00:06:45,420 --> 00:06:47,740 que hay una tabla con campos 172 00:06:47,740 --> 00:06:49,560 con estos nombres y ya está 173 00:06:49,560 --> 00:06:51,620 lo que pasa es que bueno, este es problemático 174 00:06:51,620 --> 00:06:53,180 ahora lo ponemos con él 175 00:06:53,180 --> 00:06:55,600 porque en cuanto hay nombre no hay problema 176 00:06:55,600 --> 00:06:57,480 asumiría que hay un campo de tipo 177 00:06:57,480 --> 00:06:58,699 entero 178 00:06:58,699 --> 00:07:01,339 y aquí uno de tipo bar chart 179 00:07:01,339 --> 00:07:03,579 y ya está, y que se llaman así 180 00:07:03,579 --> 00:07:05,920 si no se llaman así 181 00:07:05,920 --> 00:07:08,040 los podemos anotar 182 00:07:08,040 --> 00:07:11,100 ¿Vale? Con column 183 00:07:11,100 --> 00:07:13,420 ¿Vale? Por ejemplo 184 00:07:13,420 --> 00:07:14,779 Nombre 185 00:07:14,779 --> 00:07:16,160 Resulta que no se llama así 186 00:07:16,160 --> 00:07:18,819 Pues lo podemos anotar 187 00:07:18,819 --> 00:07:20,079 Con 188 00:07:20,079 --> 00:07:23,740 Column ¿Vale? 189 00:07:25,420 --> 00:07:26,180 Si 190 00:07:26,180 --> 00:07:28,240 En el otro también se podría 191 00:07:28,240 --> 00:07:29,199 ¿Vale? 192 00:07:29,199 --> 00:07:29,360 Eh 193 00:07:29,360 --> 00:07:33,439 Pero bueno 194 00:07:33,439 --> 00:07:34,800 Si alguna cosa no nos funciona 195 00:07:34,800 --> 00:07:36,720 Nos vamos a tiro fijo y la cambiamos 196 00:07:36,720 --> 00:07:38,180 Porque yo no me lo recuerdo todo de memoria 197 00:07:38,180 --> 00:07:39,100 Tengo 198 00:07:39,100 --> 00:07:42,399 Tendría 199 00:07:42,399 --> 00:07:44,740 Tengo la chuletilla por ahí, en algún momento tendré que abrirla 200 00:07:44,740 --> 00:07:45,839 Pero hay muchas cosas de la que no me acuerdo 201 00:07:45,839 --> 00:07:48,839 A ver, pues yo que sé, imaginaos pues eso que se llama así 202 00:07:48,839 --> 00:07:50,180 Pues ya está 203 00:07:50,180 --> 00:07:58,680 Ah, ya está 204 00:07:58,680 --> 00:08:00,779 Decía que es raro que no me la permita importar 205 00:08:00,779 --> 00:08:02,779 Vale, en mi caso, pues bueno 206 00:08:02,779 --> 00:08:04,480 Como se llama nombre, ¿verdad? 207 00:08:05,079 --> 00:08:06,620 Pues la llamo nombre y ya está 208 00:08:06,620 --> 00:08:09,620 Vale 209 00:08:09,620 --> 00:08:12,779 Aquí lo que pasa es que necesitamos 210 00:08:12,779 --> 00:08:13,420 Más cosas 211 00:08:13,420 --> 00:08:15,759 Primero, el ID 212 00:08:15,759 --> 00:08:16,899 el ID 213 00:08:16,899 --> 00:08:20,199 es autoincrement, es generado 214 00:08:20,199 --> 00:08:21,120 por la base de datos 215 00:08:21,120 --> 00:08:24,060 entonces eso hay que decírselo a JPA 216 00:08:24,060 --> 00:08:25,759 porque cuando nosotros 217 00:08:25,759 --> 00:08:28,139 JPA 218 00:08:28,139 --> 00:08:29,980 tiene que saber que este 219 00:08:29,980 --> 00:08:31,500 no tiene que pasarlo 220 00:08:31,500 --> 00:08:33,120 cuando haga un insert 221 00:08:33,120 --> 00:08:35,799 no tiene que pasarlo porque la base de datos lo va 222 00:08:35,799 --> 00:08:37,840 a generar, entonces 223 00:08:37,840 --> 00:08:40,059 hay que avisarle a JPA, hay que caracterizar 224 00:08:40,059 --> 00:08:41,940 a JPA, hay que caracterizarle 225 00:08:41,940 --> 00:08:43,220 todo lo mejor posible 226 00:08:43,220 --> 00:08:46,340 Vale, pues id es una clave primaria 227 00:08:46,340 --> 00:08:47,039 Entonces id 228 00:08:47,039 --> 00:08:49,539 Para decir que es una clave primaria 229 00:08:49,539 --> 00:08:55,080 Pues se anota con id 230 00:08:55,080 --> 00:08:58,080 Entonces esto solamente 231 00:08:58,080 --> 00:09:00,659 Implica que es clave primaria 232 00:09:00,659 --> 00:09:03,960 Lo cual a jpa le viene muy bien 233 00:09:03,960 --> 00:09:05,960 Para detectar ya desde el mundo 234 00:09:05,960 --> 00:09:08,320 De los objetos si hay inconsistencias 235 00:09:08,320 --> 00:09:09,960 Porque hay dos objetos con la misma clave 236 00:09:09,960 --> 00:09:10,799 No te va a permitir 237 00:09:10,799 --> 00:09:15,309 bueno, pues entonces, si además 238 00:09:15,309 --> 00:09:17,009 queremos decirle, oye 239 00:09:17,009 --> 00:09:18,710 que esta clave primaria es autoincrement 240 00:09:18,710 --> 00:09:20,850 pues le tenemos que poner 241 00:09:20,850 --> 00:09:22,850 el atributo correspondiente 242 00:09:22,850 --> 00:09:24,750 que este es el que nunca me acuerdo 243 00:09:24,750 --> 00:09:25,909 pero aquí lo tengo que 244 00:09:25,909 --> 00:09:28,049 por ejemplo aquí seguro que está 245 00:09:28,049 --> 00:09:31,009 claro, por ejemplo 246 00:09:31,009 --> 00:09:39,070 aquí seguro 247 00:09:39,070 --> 00:09:40,409 que hay uno 248 00:09:40,409 --> 00:09:46,879 vale 249 00:09:46,879 --> 00:09:48,659 esto 250 00:09:48,659 --> 00:09:55,549 es lo que ponemos 251 00:09:55,549 --> 00:09:59,049 para indicar 252 00:09:59,049 --> 00:10:02,940 que es 253 00:10:02,940 --> 00:10:05,360 una clave primaria 254 00:10:05,360 --> 00:10:07,659 autogenerada 255 00:10:07,659 --> 00:10:08,580 ¿vale? 256 00:10:09,320 --> 00:10:10,480 esta anotación de aquí 257 00:10:10,480 --> 00:10:12,440 para poner que es una clave primaria autogenerada 258 00:10:12,440 --> 00:10:28,950 da igual 259 00:10:28,950 --> 00:10:30,389 si, si, si, da lo mismo 260 00:10:30,389 --> 00:10:32,649 a mi me gusta 261 00:10:32,649 --> 00:10:34,049 más ponerlo en los métodos 262 00:10:34,049 --> 00:10:36,250 Pero esos sí que son manías 263 00:10:36,250 --> 00:10:37,110 ¿Vale? 264 00:10:38,250 --> 00:10:41,360 Para indicarle a JPA 265 00:10:41,360 --> 00:10:43,600 Que esta clave se autogenera 266 00:10:43,600 --> 00:10:45,639 En la base de datos 267 00:10:45,639 --> 00:10:47,639 No se asigna desde aquí 268 00:10:47,639 --> 00:10:49,000 No se asigna desde aquí 269 00:10:49,000 --> 00:10:50,059 ¿Hay alguien que se identifique? 270 00:10:50,460 --> 00:10:50,940 ¿Auto? 271 00:10:51,200 --> 00:10:54,759 ¿Auto no suena más a... 272 00:10:54,759 --> 00:10:58,299 No sé decirte 273 00:10:58,299 --> 00:11:00,080 La que se pone es esta 274 00:11:00,080 --> 00:11:02,019 No sé decirte 275 00:11:02,019 --> 00:11:04,759 Vale, que suba, si son Getty Set 276 00:11:04,759 --> 00:11:06,519 Ah, los de Yakarta 277 00:11:06,519 --> 00:11:07,840 A los que él te ofrezca de Yacarta 278 00:11:07,840 --> 00:11:12,299 Pero tú has cambiado 279 00:11:12,299 --> 00:11:14,980 Tu proyecto 280 00:11:14,980 --> 00:11:18,100 A ver, le has cambiado el nivel 281 00:11:18,100 --> 00:11:19,840 De la máquina virtual y de compilación 282 00:11:19,840 --> 00:11:24,019 Pues no sé 283 00:11:24,019 --> 00:11:27,899 Si has puesto la dependencia correcta 284 00:11:27,899 --> 00:11:30,620 No estás en un nivel 285 00:11:30,620 --> 00:11:33,259 De compilación 286 00:11:33,259 --> 00:11:34,200 Del año Gatapun 287 00:11:34,200 --> 00:11:36,059 Debería ofrecerte 288 00:11:36,059 --> 00:11:39,320 Vale 289 00:11:39,320 --> 00:11:42,019 entonces con esto 290 00:11:42,019 --> 00:11:44,059 estos dos campos están completamente 291 00:11:44,059 --> 00:11:45,919 caracterizados, no hay que caracterizar 292 00:11:45,919 --> 00:11:47,759 ya nada más, pero claro 293 00:11:47,759 --> 00:11:49,899 tenemos un campo raro 294 00:11:49,899 --> 00:11:53,320 este campo de aquí es raro 295 00:11:53,320 --> 00:11:55,340 porque este 296 00:11:55,340 --> 00:11:57,039 campo de aquí en realidad 297 00:11:57,039 --> 00:11:59,620 nosotros hemos puesto que es una propiedad 298 00:11:59,620 --> 00:12:01,240 de tipo objeto departamento 299 00:12:01,240 --> 00:12:02,980 pero en la tabla 300 00:12:02,980 --> 00:12:05,559 en la tabla lógicamente no es un objeto 301 00:12:05,559 --> 00:12:07,639 en la tabla es 302 00:12:07,639 --> 00:12:09,500 un entero 303 00:12:09,500 --> 00:12:12,000 en la tabla es un entero 304 00:12:12,000 --> 00:12:14,059 entonces ahí sí que hay un mapeo raro 305 00:12:14,059 --> 00:12:16,259 es un entero 306 00:12:16,259 --> 00:12:17,879 y sin embargo en el objeto 307 00:12:17,879 --> 00:12:20,440 empleado es un objeto 308 00:12:20,440 --> 00:12:21,580 enterito de departamento 309 00:12:21,580 --> 00:12:24,460 claro, eso es así, porque esto es una clave ajena 310 00:12:24,460 --> 00:12:26,639 lógicamente, entonces hay que decírselo 311 00:12:26,639 --> 00:12:27,220 a JPA 312 00:12:27,220 --> 00:12:30,120 hay que decírselo a JPA y hay que decirle 313 00:12:30,120 --> 00:12:30,879 oye, tú 314 00:12:30,879 --> 00:12:34,039 si lo veis todo más claro 315 00:12:34,039 --> 00:12:36,519 porque está todo al principio en las propiedades 316 00:12:36,519 --> 00:12:37,799 pues ponerlo en las propiedades 317 00:12:37,799 --> 00:12:39,759 entonces 318 00:12:39,759 --> 00:12:42,600 aquí en getDepartamento 319 00:12:42,600 --> 00:12:45,379 le diríamos 320 00:12:45,379 --> 00:12:47,419 oye tú, para construir este objeto 321 00:12:47,419 --> 00:12:49,279 departamento, para construirlo 322 00:12:49,279 --> 00:12:51,299 que sepas que esto 323 00:12:51,299 --> 00:12:53,399 viene de una clave que es 324 00:12:53,399 --> 00:12:54,940 de 325 00:12:54,940 --> 00:12:56,919 muchos a uno 326 00:12:56,919 --> 00:12:58,960 recordad que estamos en empleado 327 00:12:58,960 --> 00:13:01,240 esto ya era en la clase empleado 328 00:13:01,240 --> 00:13:03,539 entonces, desde el empleado 329 00:13:03,539 --> 00:13:05,379 las relaciones de muchos 330 00:13:05,379 --> 00:13:07,299 a uno, ¿verdad? muchos empleados 331 00:13:07,299 --> 00:13:08,399 Un departamento 332 00:13:08,399 --> 00:13:10,919 Entonces desde aquí, desde empleado 333 00:13:10,919 --> 00:13:12,860 Esto viene porque es una relación 334 00:13:12,860 --> 00:13:14,860 De muchos empleados, un departamento 335 00:13:14,860 --> 00:13:17,320 Y le tengo que avisar a JPA 336 00:13:17,320 --> 00:13:18,120 De esta manera 337 00:13:18,120 --> 00:13:20,340 Cuidado que esto viene 338 00:13:20,340 --> 00:13:22,179 Porque hay aquí una clave ajena 339 00:13:22,179 --> 00:13:24,700 ¿Vale? 340 00:13:26,120 --> 00:13:28,960 Entonces JPA cuando recupera este objeto 341 00:13:28,960 --> 00:13:30,440 Dice, ah ojo 342 00:13:30,440 --> 00:13:32,279 Espérate, que para recuperarlo 343 00:13:32,279 --> 00:13:34,600 Tengo que seguir la clave 344 00:13:34,600 --> 00:13:35,799 E irme hasta la otra tabla 345 00:13:35,799 --> 00:13:37,639 Entonces se le hace el select correspondiente 346 00:13:37,639 --> 00:13:38,679 Y se va hasta la otra tabla 347 00:13:38,679 --> 00:13:42,809 Pero claro, de la clave ajena hay que configurar más 348 00:13:42,809 --> 00:13:44,070 Hay que configurar por lo menos 349 00:13:44,070 --> 00:13:45,710 Oye, ¿cuál es el campo del que tienes que tirar? 350 00:13:45,809 --> 00:13:46,529 Que no lo hemos puesto 351 00:13:46,529 --> 00:13:49,809 Entonces, esto 352 00:13:49,809 --> 00:13:55,710 Aquí 353 00:13:55,710 --> 00:13:59,980 A ver que lo ponga bien 354 00:13:59,980 --> 00:14:10,730 Vale 355 00:14:10,730 --> 00:14:23,889 Claro 356 00:14:23,889 --> 00:14:29,330 Entonces hay que decirle 357 00:14:29,330 --> 00:14:30,730 El campo del que tirar 358 00:14:30,730 --> 00:14:32,690 Para construir el objeto departamento 359 00:14:32,690 --> 00:14:35,090 Entonces el campo del que tirar 360 00:14:35,090 --> 00:14:37,509 Es id barra baja departamento 361 00:14:37,509 --> 00:14:38,250 En mi caso 362 00:14:38,250 --> 00:14:39,789 Y en el vuestro si habéis 363 00:14:39,789 --> 00:14:41,629 Hecho la misma base de datos 364 00:14:41,629 --> 00:14:42,990 Vale 365 00:14:42,990 --> 00:14:54,549 Pero aquí hay muchas más cosas que se pueden configurar 366 00:14:54,549 --> 00:14:55,669 Se podría dejar así 367 00:14:55,669 --> 00:14:56,769 Y listo 368 00:14:56,769 --> 00:15:00,029 Y ya esta entidad está bien configurada 369 00:15:00,029 --> 00:15:02,049 ¿Vale? 370 00:15:02,309 --> 00:15:04,570 Pero hay más cosas que se pueden configurar aquí 371 00:15:04,570 --> 00:15:05,909 Que si no lo hacemos 372 00:15:05,909 --> 00:15:07,450 Cogen los valores por defecto 373 00:15:07,450 --> 00:15:12,389 Y una de ellas es especialmente interesante. 374 00:15:12,529 --> 00:15:13,070 Bueno, varias. 375 00:15:13,850 --> 00:15:16,409 Hay una, por ejemplo, que es updatable. 376 00:15:20,490 --> 00:15:22,370 Aunque esta quizás es la menos interesante. 377 00:15:27,700 --> 00:15:31,799 A ver, un momento que... 378 00:15:31,799 --> 00:15:34,860 Así, ¿vale? 379 00:15:36,759 --> 00:15:38,759 Entonces, esta es un poco una tontería. 380 00:15:38,759 --> 00:15:43,600 Y es, me especifica, si una vez creado el objeto empleado, 381 00:15:44,039 --> 00:15:46,799 ya tengo yo mi objeto persistente 382 00:15:46,799 --> 00:15:48,720 empleado, entonces recordad 383 00:15:48,720 --> 00:15:50,700 que en realidad vamos a estar siempre trabajando en los 384 00:15:50,700 --> 00:15:52,860 objetos, luego ya los diferentes 385 00:15:52,860 --> 00:15:54,600 commits y las diferentes cosas 386 00:15:54,600 --> 00:15:56,580 que hace hibernate van a ser las que 387 00:15:56,580 --> 00:15:58,940 hagan que eso se refleje en la base de datos 388 00:15:58,940 --> 00:16:00,899 pero para nosotros nuestro problema 389 00:16:00,899 --> 00:16:01,899 va a estar en los objetos 390 00:16:01,899 --> 00:16:04,460 bueno pues aquí el tema es cuando tenga yo un objeto 391 00:16:04,460 --> 00:16:06,700 empleado persistente que lo cree por primera 392 00:16:06,700 --> 00:16:08,700 vez, ya veremos como lo puedo crear o hacerlo 393 00:16:08,700 --> 00:16:10,840 aparecer, si su 394 00:16:10,840 --> 00:16:12,600 objeto departamento que 395 00:16:12,600 --> 00:16:14,799 tiene colgando ahí un departamento, el que tiene colgando 396 00:16:14,799 --> 00:16:16,200 lo voy a poder modificar o no 397 00:16:16,200 --> 00:16:18,539 si lo voy a 398 00:16:18,539 --> 00:16:20,600 si lo pongo a true, lo voy a poder 399 00:16:20,600 --> 00:16:22,419 modificar y si no, no lo voy a poder modificar 400 00:16:22,419 --> 00:16:24,100 ese empleado va a tener su departamento 401 00:16:24,100 --> 00:16:26,100 no me va a dejar modificar esta propiedad 402 00:16:26,100 --> 00:16:28,240 bueno, eso significa loop datable este 403 00:16:28,240 --> 00:16:30,799 vale, pero sobre todo nos interesa 404 00:16:30,799 --> 00:16:32,580 el momento 405 00:16:32,580 --> 00:16:34,480 de carga del objeto, el momento 406 00:16:34,480 --> 00:16:35,580 de carga del objeto 407 00:16:35,580 --> 00:16:38,279 a ver donde puedo tener esto, aquí 408 00:16:38,279 --> 00:16:45,480 el momento de carga 409 00:16:45,480 --> 00:16:46,220 este 410 00:16:46,220 --> 00:17:17,869 A ver, es que aquí nunca tengo muy claro 411 00:17:17,869 --> 00:17:22,309 Si se puede poner en cualquiera de los dos lados 412 00:17:22,309 --> 00:17:24,309 O no, pero en cualquier caso 413 00:17:24,309 --> 00:17:26,109 Lo ponga donde lo ponga, me debería dejar 414 00:17:26,109 --> 00:17:27,470 Importarlo 415 00:17:27,470 --> 00:17:28,910 A ver 416 00:17:28,910 --> 00:17:41,309 Espérate, es que no siento empleado 417 00:17:41,309 --> 00:17:43,069 Estoy, a ver, que me estoy liando 418 00:17:43,069 --> 00:17:45,750 Un momentito, voy a cerrarlo todo 419 00:17:45,750 --> 00:17:53,130 ya no sé en qué clase empleado estoy a ver nuestro proyecto es este este empleados clase 420 00:17:53,130 --> 00:18:01,759 vale vale a ver a ver es que no estaba yo no tenía que estar 421 00:18:05,460 --> 00:18:09,140 y ahora control uve 422 00:18:11,140 --> 00:18:14,779 si es que estoy probando a ver si me deja poner si me deja poderlo aquí 423 00:18:14,779 --> 00:18:20,000 Ah, vale, por eso no me deja 424 00:18:20,000 --> 00:18:22,099 Vale, es que quería probar 425 00:18:22,099 --> 00:18:24,500 Porque tenía mis dudas 426 00:18:24,500 --> 00:18:25,940 Sobre si por curiosidad 427 00:18:25,940 --> 00:18:27,039 En el otro lado te dejaba 428 00:18:27,039 --> 00:18:28,640 Pero no 429 00:18:28,640 --> 00:18:32,019 No te deja ponerlo ahí 430 00:18:32,019 --> 00:18:34,829 ¡Hala! 431 00:18:35,450 --> 00:18:36,490 Vale, pues entonces 432 00:18:36,490 --> 00:18:38,190 Esto sí que es importante 433 00:18:38,190 --> 00:18:40,910 Y esto además aparece en todo tipo de relaciones 434 00:18:40,910 --> 00:18:41,490 Ahora lo veremos 435 00:18:41,490 --> 00:18:44,089 Esto es en qué momento 436 00:18:44,089 --> 00:18:46,450 carga el objeto departamento. 437 00:18:47,269 --> 00:18:49,089 Es decir, yo recupero de la base de datos 438 00:18:49,089 --> 00:18:49,849 un empleado 439 00:18:49,849 --> 00:18:52,210 y ya desde el momento en que lo recupero 440 00:18:52,210 --> 00:18:54,390 ya veremos cómo tengo ahí mi objeto persistente 441 00:18:54,390 --> 00:18:56,529 dentro del contexto de persistencia 442 00:18:56,529 --> 00:18:57,549 para hacer con él lo que quiera. 443 00:18:58,029 --> 00:18:59,849 Y cualquier cosa que haga en ese objeto 444 00:18:59,849 --> 00:19:01,769 pues en algún momento 445 00:19:01,769 --> 00:19:03,990 Ibernate lo sincronizará con la base de datos. 446 00:19:04,490 --> 00:19:05,690 Ya veremos en qué momento es eso. 447 00:19:06,569 --> 00:19:07,710 Bueno, pero claro, 448 00:19:08,910 --> 00:19:10,890 mi objeto empleado 449 00:19:10,890 --> 00:19:12,930 en realidad tiene mucho dentro 450 00:19:12,930 --> 00:19:17,009 porque tiene sus datos, ID y nombre 451 00:19:17,009 --> 00:19:19,069 y tiene el objeto departamento entero 452 00:19:19,069 --> 00:19:21,650 en este caso el objeto departamento no es tan grande 453 00:19:21,650 --> 00:19:23,150 pero podría ser un objeto enorme 454 00:19:23,150 --> 00:19:27,210 entonces, el lazy este significa 455 00:19:27,210 --> 00:19:30,670 el lazy significa 456 00:19:30,670 --> 00:19:35,329 oye tú, cuando tú me cargues el objeto empleado 457 00:19:35,329 --> 00:19:38,150 tú, JPA y Bernate, cuando me lo cargues 458 00:19:38,150 --> 00:19:41,230 no me rellenes el objeto departamento 459 00:19:41,230 --> 00:19:42,809 haz el vago 460 00:19:42,809 --> 00:19:45,029 y no me rellenes el objeto de departamento 461 00:19:45,029 --> 00:19:47,130 rellénamelo 462 00:19:47,130 --> 00:19:49,109 solo si yo te lo pido 463 00:19:49,109 --> 00:19:50,789 solo si yo te lo pido 464 00:19:50,789 --> 00:19:53,009 ¿vale? si yo te lo pido, en ese caso 465 00:19:53,009 --> 00:19:55,109 tú me haces el sellet ahí rápido, sin que yo me entere 466 00:19:55,109 --> 00:19:56,529 y me lo 467 00:19:56,529 --> 00:19:59,049 rellenas, entonces eso 468 00:19:59,049 --> 00:20:01,549 optimiza memoria, porque solamente 469 00:20:01,549 --> 00:20:03,069 va a cargar 470 00:20:03,069 --> 00:20:05,069 lo que tiene colgando por dentro 471 00:20:05,069 --> 00:20:07,009 si yo se lo pido 472 00:20:07,009 --> 00:20:08,849 si no se lo pido, él carga 473 00:20:08,849 --> 00:20:09,910 el empleado sin más 474 00:20:09,910 --> 00:20:14,619 Forzar la carga 475 00:20:14,619 --> 00:20:15,859 Forzarla 476 00:20:15,859 --> 00:20:19,160 Desde el principio sería esta opción 477 00:20:19,160 --> 00:20:20,240 Son las dos 478 00:20:20,240 --> 00:20:23,079 Con esta, si yo cargo el objeto empleado 479 00:20:23,079 --> 00:20:23,920 Se carga todo 480 00:20:23,920 --> 00:20:26,500 Esto sería una forma de forzar la carga 481 00:20:26,500 --> 00:20:28,500 Por defecto 482 00:20:28,500 --> 00:20:30,420 No sé cuál de las dos tiene 483 00:20:30,420 --> 00:20:32,079 Porque hay varios extremos 484 00:20:32,079 --> 00:20:34,480 Luego lo miramos cuando tengamos todos los extremos 485 00:20:34,480 --> 00:20:36,400 De todas las relaciones puestas 486 00:20:36,400 --> 00:20:37,339 Cuando lo veamos 487 00:20:37,339 --> 00:20:40,240 Por defecto no sé cuál de las dos pone 488 00:20:40,240 --> 00:20:42,259 Pero hombre, siempre es más recomendable 489 00:20:42,259 --> 00:20:45,160 Pero hay un matiz 490 00:20:45,160 --> 00:20:47,059 Hay un matiz importante 491 00:20:47,059 --> 00:20:49,519 Para que no nos salga 492 00:20:49,519 --> 00:20:52,140 Una excepción de vagos 493 00:20:52,140 --> 00:20:54,220 La excepción de vagos 494 00:20:54,220 --> 00:20:55,420 Que nos puede salir 495 00:20:55,420 --> 00:20:57,880 Antes de seguir vamos a hacer un mail rápido 496 00:20:57,880 --> 00:21:07,710 Cuidado que no nos salga la excepción de vagos 497 00:21:07,710 --> 00:21:09,890 Que sale mucho si no hemos gestionado bien 498 00:21:09,890 --> 00:21:11,670 Todo el tema de las transacciones 499 00:21:11,670 --> 00:21:13,190 De los servicios, de todo eso 500 00:21:13,190 --> 00:21:15,250 La ley sin inicialización 501 00:21:15,250 --> 00:21:16,029 Esta excepción 502 00:21:16,029 --> 00:21:25,029 A ver, tú coges el empleado y haces cosas con el empleado y luego te apetece el departamento, pues accedes al departamento. 503 00:21:26,150 --> 00:21:32,589 Entonces Ibernate, ostras, que me está diciendo que es departamento, pues sin decirte nada se va corriendo a hacer el select en ese momento, se va corriendo a hacerlo. 504 00:21:33,089 --> 00:21:37,549 Pero claro, tiene que estar la sesión todavía abierta. 505 00:21:38,269 --> 00:21:40,650 Si no está abierta, él ya no puede hacer el select. 506 00:21:40,650 --> 00:21:43,349 entonces en función de como hayamos gestionado 507 00:21:43,349 --> 00:21:45,230 las transacciones y las sesiones 508 00:21:45,230 --> 00:21:46,890 pues si no lo hemos 509 00:21:46,890 --> 00:21:48,089 planificado bien 510 00:21:48,089 --> 00:21:51,450 yo tengo mi objeto empleado 511 00:21:51,450 --> 00:21:52,950 me hago el get departamento 512 00:21:52,950 --> 00:21:55,250 y Bernate va corriendo, corriendo 513 00:21:55,250 --> 00:21:56,990 a escondidas a hacerme el select 514 00:21:56,990 --> 00:21:58,309 para rellenármelo 515 00:21:58,309 --> 00:22:00,849 y resulta que no puede porque está cerrada 516 00:22:00,849 --> 00:22:01,910 la sesión 517 00:22:01,910 --> 00:22:04,670 entonces nos sale esta excepción 518 00:22:04,670 --> 00:22:07,089 luego cuidado porque esto sale 519 00:22:07,089 --> 00:22:09,069 más de lo que parece cuando tenemos ya un diseño 520 00:22:09,069 --> 00:22:11,369 con un montón de clases y de cosas 521 00:22:11,369 --> 00:22:12,930 incluso cuando lo tenemos con Spring 522 00:22:12,930 --> 00:22:15,670 sale a menudo, pero hay que tener mucho cuidado 523 00:22:15,670 --> 00:22:17,490 los métodos de los servicios, los que 524 00:22:17,490 --> 00:22:19,369 están metidos en transacciones, los que no 525 00:22:19,369 --> 00:22:21,369 para que no nos salga esto 526 00:22:21,369 --> 00:22:23,470 pero esto va a ser más fácil 527 00:22:23,470 --> 00:22:25,250 si lo vamos 528 00:22:25,250 --> 00:22:27,509 a la vez que vamos poniendo anotaciones, vamos viendo 529 00:22:27,509 --> 00:22:29,809 ejemplos en un main limpio 530 00:22:29,809 --> 00:22:31,549 todavía sin arquitectura, sin DAO 531 00:22:31,549 --> 00:22:33,589 sin servicio y sin nada, para ver cómo funciona 532 00:22:33,589 --> 00:22:35,670 vamos a hacernos un main patatero 533 00:22:35,670 --> 00:22:37,269 asqueroso como si estuviéramos en primero 534 00:22:37,269 --> 00:22:38,150 guarro cochino 535 00:22:38,150 --> 00:22:40,869 y luego ya metemos un patrón 536 00:22:40,869 --> 00:22:42,250 con DAO y con cosas 537 00:22:42,250 --> 00:22:50,869 venga, vamos a hacernos un 538 00:22:50,869 --> 00:22:51,869 main por aquí 539 00:22:51,869 --> 00:23:00,519 vale, esto es solo para ver cómo funcionan las anotaciones 540 00:23:00,519 --> 00:23:02,839 ya sé que es un diseño horroroso 541 00:23:02,839 --> 00:23:04,079 pero vamos a meter todo aquí en el main 542 00:23:04,079 --> 00:23:06,759 es muy feo todo aquí en el main 543 00:23:06,759 --> 00:23:08,859 a mogollón, pero bueno, para ver cómo funcionan las anotaciones 544 00:23:08,859 --> 00:23:09,680 vale, pues a ver 545 00:23:09,680 --> 00:23:12,799 ahora queremos hacer cosas con este objeto empleado 546 00:23:12,799 --> 00:23:14,700 insertar un empleado en la base de datos 547 00:23:14,700 --> 00:23:16,339 recuperarlo, mirar su departamento 548 00:23:16,339 --> 00:23:18,319 hacer cosas en general, queremos hacer cosas 549 00:23:18,319 --> 00:23:22,359 Pues necesitamos un contexto de persistencia. 550 00:23:23,359 --> 00:23:28,519 El contexto de persistencia en JPA es el Entity Manager. 551 00:23:29,299 --> 00:23:29,900 ¿Vale? 552 00:23:29,940 --> 00:23:30,740 El Entity Manager. 553 00:23:31,339 --> 00:23:34,960 Y el Entity Manager, ¿quién lo crea? 554 00:23:35,079 --> 00:23:36,220 Lo crea un Factory. 555 00:23:36,880 --> 00:23:37,140 ¿Vale? 556 00:23:37,220 --> 00:23:39,500 Lo crea un Factory que lo voy a copiar por aquí. 557 00:23:40,759 --> 00:23:42,519 Tendré en algún... 558 00:23:43,660 --> 00:23:44,059 Esto. 559 00:23:44,759 --> 00:23:45,000 Vale. 560 00:23:56,480 --> 00:23:56,960 A ver. 561 00:24:04,170 --> 00:24:05,250 Vale, hay un Factory. 562 00:24:05,730 --> 00:24:07,730 EntityManagerFactory 563 00:24:07,730 --> 00:24:08,410 ¿Vale? 564 00:24:14,089 --> 00:24:15,269 Y ahora 565 00:24:15,269 --> 00:24:17,170 Un segundinín que completo esta línea 566 00:24:17,170 --> 00:24:19,410 Factory, create entity manager 567 00:24:19,410 --> 00:24:21,190 Ahora miramos eso 568 00:24:21,190 --> 00:24:25,720 Vale, ahora 569 00:24:25,720 --> 00:24:27,900 Lo que va ahí entre paréntesis 570 00:24:27,900 --> 00:24:30,519 Es string, ahora lo entramos con él 571 00:24:30,519 --> 00:24:32,039 ¡Hala! 572 00:24:32,579 --> 00:24:33,500 Aquí ya tenemos 573 00:24:33,500 --> 00:24:35,920 Un contexto de persistencia 574 00:24:35,920 --> 00:24:36,680 ¿Vale? 575 00:24:38,920 --> 00:24:40,359 Si no usamos sprint 576 00:24:40,359 --> 00:24:43,299 Que lo crea él 577 00:24:43,299 --> 00:24:45,220 automáticamente y decide cuando 578 00:24:45,220 --> 00:24:47,019 lo cierra y cuando lo abre según las 579 00:24:47,019 --> 00:24:49,380 anotaciones que pongamos nosotros en transacciones 580 00:24:49,380 --> 00:24:51,079 patatín, si no usamos 581 00:24:51,079 --> 00:24:52,960 Spring, tenemos que gestionar 582 00:24:52,960 --> 00:24:55,099 nosotros cuando abrir y cerrar este contexto 583 00:24:55,099 --> 00:24:56,960 de persistencia, ¿vale? Entonces 584 00:24:56,960 --> 00:24:58,859 este contexto de persistencia 585 00:24:58,859 --> 00:25:03,220 cuando está abierto, ahora ya 586 00:25:03,220 --> 00:25:05,180 a partir de aquí, me permite 587 00:25:05,180 --> 00:25:07,119 crear objetos persistentes 588 00:25:07,119 --> 00:25:08,759 sincronizados con la base de datos 589 00:25:08,759 --> 00:25:11,059 a partir de aquí, ¿vale? 590 00:25:11,099 --> 00:25:13,220 Lo que pasa es que, claro, diré, hombre, el contexto 591 00:25:13,220 --> 00:25:15,180 de persistencia tiene que estar asociado 592 00:25:15,180 --> 00:25:15,500 dime 593 00:25:15,500 --> 00:25:19,059 si, es un string que ahora mismo 594 00:25:19,059 --> 00:25:21,119 no pone nada interesante pero lo vamos a tener que poner a mano 595 00:25:21,119 --> 00:25:22,640 vamos a ponerlo ahora 596 00:25:22,640 --> 00:25:28,589 ahora completamos eso, entonces 597 00:25:28,589 --> 00:25:30,970 este contexto de persistencia 598 00:25:30,970 --> 00:25:33,029 tiene que conocer 599 00:25:33,029 --> 00:25:34,890 tiene que saber cuál es la base de datos 600 00:25:34,890 --> 00:25:36,289 a la que se va a conectar 601 00:25:36,289 --> 00:25:39,170 y muchas, la url, todo eso 602 00:25:39,170 --> 00:25:40,750 vale 603 00:25:40,750 --> 00:25:42,609 que no lo hemos configurado en ningún momento 604 00:25:42,609 --> 00:25:45,170 no lo hemos configurado, pues eso se configura en un archivo 605 00:25:45,170 --> 00:25:46,950 en un archivo que se llama 606 00:25:46,950 --> 00:25:48,069 Persistence 607 00:25:48,069 --> 00:25:50,630 Entonces, ese archivo Persistence 608 00:25:50,630 --> 00:25:52,930 Tiene que estar ubicado en el 609 00:25:52,930 --> 00:25:55,049 Path, etc, etc, pues en los proyectos 610 00:25:55,049 --> 00:25:56,849 Maven, ese archivo 611 00:25:56,849 --> 00:25:58,829 Persistence está 612 00:25:58,829 --> 00:26:00,109 Dentro de resources 613 00:26:00,109 --> 00:26:02,690 En una carpeta que se llama MetaIn 614 00:26:02,690 --> 00:26:05,009 Ahora lo abro y si vemos que es 615 00:26:05,009 --> 00:26:06,849 Muy largo, lo subimos rápidamente a la hora virtual 616 00:26:06,849 --> 00:26:09,069 Vale, a ver 617 00:26:09,069 --> 00:26:13,849 Pues crea carpeta 618 00:26:13,849 --> 00:26:15,529 Si, cread dentro de ese RCM 619 00:26:15,529 --> 00:26:17,470 En resources, una carpeta 620 00:26:17,470 --> 00:26:19,789 Meta-inf 621 00:26:19,789 --> 00:26:27,230 ¿Veis? Esta carpeta 622 00:26:27,230 --> 00:26:28,730 Dentro de 623 00:26:28,730 --> 00:26:29,990 SR 624 00:26:29,990 --> 00:26:32,329 ¿Dónde estoy yo? Ah, no, estoy aquí 625 00:26:32,329 --> 00:26:32,970 Vale 626 00:26:32,970 --> 00:26:40,160 Ah, que la he pegado en otro 627 00:26:40,160 --> 00:26:44,680 Ahí, no sé dónde la había pegado 628 00:26:44,680 --> 00:26:45,839 Pero bueno, vale 629 00:26:45,839 --> 00:26:50,279 Dentro de 630 00:26:50,279 --> 00:26:52,579 SRC Main Resources, la carpeta 631 00:26:52,579 --> 00:26:54,240 Metainf, y aquí 632 00:26:54,240 --> 00:26:56,619 Tiene que estar 633 00:26:56,619 --> 00:26:58,900 este archivo, ahora lo subo para que lo descarguéis 634 00:26:58,900 --> 00:27:00,720 tiene que estar este archivo 635 00:27:00,720 --> 00:27:02,160 que configura 636 00:27:02,160 --> 00:27:04,000 el acceso a la base de datos 637 00:27:04,000 --> 00:27:08,079 es un archivo de configuración 638 00:27:08,079 --> 00:27:08,599 sí, sí, sí 639 00:27:08,599 --> 00:27:11,240 entonces el archivo 640 00:27:11,240 --> 00:27:13,900 este de aquí 641 00:27:13,900 --> 00:27:15,819 pues tiene los datos 642 00:27:15,819 --> 00:27:18,279 que va a necesitar el jdbc que está por debajo 643 00:27:18,279 --> 00:27:19,380 vale 644 00:27:19,380 --> 00:27:24,240 es siempre el mismo 645 00:27:24,240 --> 00:27:25,519 siempre el mismo 646 00:27:25,519 --> 00:27:32,740 Entonces, este de aquí, pues aquí configuras los datos que necesita JDBC 647 00:27:32,740 --> 00:27:39,680 Las entidades que va a manejar este contexto de persistencia 648 00:27:39,680 --> 00:27:44,079 Y aquí unas cositas que ahora explicamos un poco por encima 649 00:27:44,079 --> 00:27:48,440 Pero voy a subir este a la hora virtual rápidamente 650 00:27:48,440 --> 00:27:56,140 Sí, como un base de datos properties, como un properties de conexión 651 00:27:56,140 --> 00:27:57,859 Sí, pero configura más cosas 652 00:27:57,859 --> 00:28:13,269 Vale, lo subo arriba del todo 653 00:28:13,269 --> 00:28:15,589 Lo más alto que me deje el aula virtual 654 00:28:15,589 --> 00:28:41,680 Vale, esto, esto 655 00:28:41,680 --> 00:28:50,920 Es que va a ser más fácil sacarlo 656 00:28:50,920 --> 00:28:59,740 Espera, voy a pausar esto mientras 657 00:28:59,740 --> 00:29:04,890 Se llama 658 00:29:04,890 --> 00:29:06,910 Empleados barra baja 659 00:29:06,910 --> 00:29:08,950 Departamentos 660 00:29:08,950 --> 00:29:10,210 Vale 661 00:29:10,210 --> 00:29:11,710 entonces 662 00:29:11,710 --> 00:29:15,450 ahora, este nombrecito de aquí 663 00:29:15,450 --> 00:29:17,690 este nombrecito 664 00:29:17,690 --> 00:29:19,410 de aquí es el que 665 00:29:19,410 --> 00:29:21,809 da nombre al contexto de persistencia 666 00:29:21,809 --> 00:29:23,450 a la unidad de persistencia 667 00:29:23,450 --> 00:29:24,369 como lo llama él 668 00:29:24,369 --> 00:29:26,230 y este nombrecito de ahí 669 00:29:26,230 --> 00:29:28,990 es el que tiene que aparecer aquí luego 670 00:29:28,990 --> 00:29:33,670 aquí en nuestro main 671 00:29:33,670 --> 00:29:36,759 ahí 672 00:29:36,759 --> 00:29:39,359 entonces, vamos a llamarlo 673 00:29:39,359 --> 00:29:41,460 el contexto de persistencia, pues como lo queréis llamar 674 00:29:41,460 --> 00:29:48,220 de nuestra base de dados, empleados departamentos Persistence Unit. 675 00:29:51,730 --> 00:29:54,509 Entonces, le damos un nombre a esa unidad de persistencia, 676 00:29:54,609 --> 00:29:56,069 porque podría haber varios en realidad. 677 00:29:57,309 --> 00:29:58,450 Complicaría mucho la cosa. 678 00:29:59,190 --> 00:30:05,789 Pues, el nombre que le dais a esa unidad de persistencia es el que se pone aquí. 679 00:30:07,960 --> 00:30:11,500 Entonces, cuando arranquemos ese contexto de persistencia, 680 00:30:11,500 --> 00:30:13,359 se va a arrancar con 681 00:30:13,359 --> 00:30:15,380 la configuración que haya en el 682 00:30:15,380 --> 00:30:17,420 Persistence XML que se llame 683 00:30:17,420 --> 00:30:19,420 así, en el que 684 00:30:19,420 --> 00:30:20,859 se llame así, vale 685 00:30:20,859 --> 00:30:28,559 vale, entonces 686 00:30:28,559 --> 00:30:31,220 aquí las entidades que va a 687 00:30:31,220 --> 00:30:33,180 gestionar, departamento y 688 00:30:33,180 --> 00:30:35,640 empleado, entonces departamento 689 00:30:35,640 --> 00:30:37,180 aunque nos falta por hacerle 690 00:30:37,180 --> 00:30:39,039 cosas, vamos a ponerle que es entidad 691 00:30:39,039 --> 00:30:40,740 para que no se vuelva loco el main 692 00:30:40,740 --> 00:30:43,240 vamos a ponerle, ah, que ya la tiene 693 00:30:43,240 --> 00:30:44,799 entity, ya la tiene 694 00:30:44,799 --> 00:30:47,079 yo no entendía muy bien lo de entity 695 00:30:47,079 --> 00:30:50,019 Entity, pues que es una tabla, ya está 696 00:30:50,019 --> 00:30:58,059 A ver, porque 697 00:30:58,059 --> 00:31:00,460 Os daba error, entonces os dije 698 00:31:00,460 --> 00:31:02,319 Pues quitarlo, vamos a ver 699 00:31:02,319 --> 00:31:03,240 Esos son parámetros 700 00:31:03,240 --> 00:31:06,480 Estos son los parámetros 701 00:31:06,480 --> 00:31:08,720 Que va a usar JDBC cuando lo llame 702 00:31:08,720 --> 00:31:10,240 Hibernate 703 00:31:10,240 --> 00:31:12,619 Entonces, esto es lo que hará 704 00:31:12,619 --> 00:31:13,660 En su GetConnection 705 00:31:13,660 --> 00:31:16,319 Pues esos parámetros no los hemos estado usando 706 00:31:16,319 --> 00:31:18,460 porque no los 707 00:31:18,460 --> 00:31:20,420 hemos necesitado. Entonces, si os dan 708 00:31:20,420 --> 00:31:21,680 error, los quitáis y listo. 709 00:31:22,359 --> 00:31:24,380 Que luego cuando hagamos 710 00:31:24,380 --> 00:31:26,259 el main nos dicen, ¿necesitas configurar? 711 00:31:26,480 --> 00:31:27,980 JBBC se ha quedado sin timezone. 712 00:31:28,119 --> 00:31:30,160 Pues le ponemos, se lo ponemos, pero mientras no lo pida 713 00:31:30,160 --> 00:31:31,019 hasta ahora no nos lo han pedido. 714 00:31:32,359 --> 00:31:34,059 Bueno, ahora 715 00:31:34,059 --> 00:31:36,279 luego hay cosas que se 716 00:31:36,279 --> 00:31:38,180 pueden configurar y 717 00:31:38,180 --> 00:31:40,279 de ellas, bueno, el dialecto 718 00:31:40,279 --> 00:31:42,099 siempre lo ponemos claro que es 719 00:31:42,099 --> 00:31:43,440 MySQL, vale, claro. 720 00:31:45,119 --> 00:31:45,839 Y ahora 721 00:31:45,839 --> 00:32:13,460 Esta de aquí, esta es crítica, es de hibernate a librería de datos. Aquí cuidado, porque hay varias posibilidades, que puede ser create, update, validate, entonces, si nosotros no tenemos las tablas hechas, no las tenemos hechas, en la base de datos empleados departamentos, no están hechas, y arrancamos nuestro contexto de persistencia, 722 00:32:13,460 --> 00:32:15,740 y aquí en este hay un create 723 00:32:15,740 --> 00:32:18,279 pues lo que va a hacer 724 00:32:18,279 --> 00:32:20,160 él es crear las tablas 725 00:32:20,160 --> 00:32:21,019 automáticamente 726 00:32:21,019 --> 00:32:24,319 crearlas con la misma estructura 727 00:32:24,319 --> 00:32:25,220 de nuestros objetos 728 00:32:25,220 --> 00:32:28,240 entonces eso es muy cómodo cuando estamos 729 00:32:28,240 --> 00:32:29,160 haciendo pruebas 730 00:32:29,160 --> 00:32:32,119 porque hacemos nuestras clases 731 00:32:32,119 --> 00:32:34,440 como nos interese, hacemos la aplicación 732 00:32:34,440 --> 00:32:36,099 y la base de datos se crea 733 00:32:36,099 --> 00:32:37,920 exactamente tal y como la necesitamos 734 00:32:37,920 --> 00:32:40,000 pero en un entorno de producción jamás 735 00:32:40,000 --> 00:32:41,980 trabajaríamos así porque la base de datos nos viene 736 00:32:41,980 --> 00:32:43,200 hecha y la usa mucha gente 737 00:32:43,200 --> 00:32:46,579 ¿Vale? Si ponemos validar 738 00:32:46,579 --> 00:32:48,460 Pues él nos va a validar si 739 00:32:48,460 --> 00:32:50,940 Se corresponden nuestras anotaciones 740 00:32:50,940 --> 00:32:53,200 Con la base de datos y si no nos va a avisar 741 00:32:53,200 --> 00:32:54,920 Si ponemos 742 00:32:54,920 --> 00:32:56,799 Subdate, no nos lo crea 743 00:32:56,799 --> 00:32:58,599 Pero si ve que alguna tabla 744 00:32:58,599 --> 00:33:00,759 No se corresponde con las anotaciones, te cambia 745 00:33:00,759 --> 00:33:02,859 La tabla, entonces eso es peligroso 746 00:33:02,859 --> 00:33:04,880 Útil si estamos haciendo pruebas nosotros 747 00:33:04,880 --> 00:33:06,619 Pero peligroso en un contexto 748 00:33:06,619 --> 00:33:08,779 En el que no queremos que se cambien las tablas de los demás 749 00:33:08,779 --> 00:33:10,299 ¿Vale? Pues eso es lo que 750 00:33:10,299 --> 00:33:11,839 Para que sepáis lo que significa eso 751 00:33:11,839 --> 00:33:28,759 Y esto es simplemente para mostrar un log de los SQL que él hace, que nos es muy útil que esté a true, porque así cada vez cuando hagamos el main nos hace en consola un seguimiento de los SQL que él está haciendo por debajo, de los que está haciendo por debajo. 752 00:33:28,759 --> 00:33:31,039 Bueno, pues ahora ya con nuestro 753 00:33:31,039 --> 00:33:32,559 Persistence este de aquí 754 00:33:32,559 --> 00:33:34,200 Dime 755 00:33:34,200 --> 00:33:40,359 Si, es que 756 00:33:40,359 --> 00:33:41,960 ¿En qué paquete estoy? 757 00:33:42,140 --> 00:33:43,259 Porque claro, vamos a 758 00:33:43,259 --> 00:33:45,500 Estoy en com.dam2.model 759 00:33:45,500 --> 00:33:46,180 Es el paquete 760 00:33:46,180 --> 00:33:47,619 Y aquí como lo he llamado 761 00:33:47,619 --> 00:33:49,500 Com.dam2 762 00:33:49,500 --> 00:33:55,130 ¿Vale? 763 00:33:57,289 --> 00:33:58,890 Esto que no está bien puesto 764 00:33:58,890 --> 00:34:02,609 Vale 765 00:34:02,609 --> 00:34:04,829 Yo creo que ahora estaría ya bien adaptado 766 00:34:04,829 --> 00:34:06,150 A todo lo nuestro 767 00:34:06,150 --> 00:34:07,690 Y nuestro main entonces 768 00:34:07,690 --> 00:34:08,670 Lo abriría así 769 00:34:08,670 --> 00:34:13,340 vamos simplemente, y ahora paramos 770 00:34:13,340 --> 00:34:14,659 un par de minutos 771 00:34:14,659 --> 00:34:17,420 a ver si este main nos funciona 772 00:34:17,420 --> 00:34:18,920 o sea, vamos a darle al close 773 00:34:18,920 --> 00:34:21,340 o sea, no vamos a hacer 774 00:34:21,340 --> 00:34:23,219 nada, pero al menos a ver si la creación 775 00:34:23,219 --> 00:34:25,519 del contexto y el jdbc 776 00:34:25,519 --> 00:34:27,420 por debajo está bien, porque ya solo con esto 777 00:34:27,420 --> 00:34:29,260 nos pueden faltar dependencias, podemos haber 778 00:34:29,260 --> 00:34:30,699 hecho algo mal en el persistence 779 00:34:30,699 --> 00:34:33,159 entonces vamos a arrancar este main 780 00:34:33,159 --> 00:34:35,219 y si no nos da errores, es que está 781 00:34:35,219 --> 00:34:36,480 todo bien configurado 782 00:34:36,480 --> 00:34:41,440 bueno, a ver 783 00:34:41,440 --> 00:34:43,239 es que como departamento le faltan 784 00:34:43,239 --> 00:34:43,900 anotaciones 785 00:34:43,900 --> 00:34:47,780 entonces voy a quitarle departamento 786 00:34:47,780 --> 00:34:50,980 claro, es que 787 00:34:50,980 --> 00:34:53,780 vamos a esperar a tener departamento 788 00:34:53,780 --> 00:34:55,420 porque si no vamos a hacer arreglos parches 789 00:34:55,420 --> 00:34:57,639 vamos a esperar a tener departamento bien configurada 790 00:34:57,639 --> 00:34:58,760 y luego ya lo probamos, vale 791 00:34:58,760 --> 00:35:01,139 vamos a parar un par de minutos