Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Hibernate. Programando. - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Bueno, pues vamos aquí a crear una clase, vamos a crearnos una clase, la voy a llamar principal, simplemente, principal, simplemente es para probar que esto funciona, voy a crearla como que nos genere un main público ya para que ejecute algo y comprobar que esto funciona, el esquema de todo esto.
00:00:00
bien, pues lo primero que necesito
00:00:23
para trabajar es conectarme
00:00:26
a esa sesión, con lo cual
00:00:28
pues defino mi
00:00:30
session factory
00:00:32
ya empieza a enfadarse, es rápido
00:00:33
para enfadarse
00:00:37
con lo cual voy a seguir trabajando
00:00:38
sf
00:00:42
por ejemplo, le puedo llamar
00:00:43
y le llamo
00:00:45
a section factory
00:00:47
y útil
00:00:49
get
00:00:50
session factory
00:00:53
muy bien
00:00:54
ahora ya se puede importar
00:00:57
de aquí y ya se nos limpia
00:01:01
bueno
00:01:04
voy a abrir una sesión, lo que ya es
00:01:05
una sesión, entonces la sesión
00:01:07
que voy a abrir es esta de aquí
00:01:09
voy a llamarla as directamente como sesión
00:01:11
y voy a llamar
00:01:13
asf open
00:01:16
sesión
00:01:17
ya como saben
00:01:19
si tengo algo
00:01:21
que he creado
00:01:23
por arriba directamente, me vengo abajo y ya la cierro
00:01:25
es la manera de que vaya abriendo y cerrando las cosas, ¿de acuerdo?
00:01:29
vale, voy a generar una transacción, voy a crear una transacción
00:01:34
lo que quiero, para que sepan ustedes lo que quiero hacer
00:01:38
es simplemente crear, añadir un departamento
00:01:41
no voy a hacer nada más de momento, entonces voy a llamar
00:01:46
a mi sesión y voy a comenzar, uy perdón, que he puesto ahí una coma
00:01:49
Voy a comenzar la transacción. Muy bien. Igual que la comienzo, al final de todo tendré que esta transacción, lo que quiero es que se ejecute. Aquí tengo, por tanto, un commit.
00:01:54
no ve el problema cual es
00:02:08
y dice que añada
00:02:16
un casting, no, pues esto es que ha puesto
00:02:17
la transacción mal puesta, de acuerdo
00:02:20
estoy cogiendo el commit que no es
00:02:22
seguramente tiene que ver
00:02:24
con esto, voy a quitar este java x de aquí
00:02:26
arriba para que vean que va a ser otro problema
00:02:28
porque seleccionamos algo que no es lo que
00:02:30
queremos, me voy a ir
00:02:32
a tcommit otra vez
00:02:34
tcommit
00:02:35
y vemos que había hasta uno de
00:02:37
persistencia entity y otro
00:02:40
de transacción, ¿de acuerdo?
00:02:42
Entonces
00:02:44
este de transacción y nos da
00:02:45
problemas, voy a borrar
00:02:49
otra vez, y tenemos
00:02:53
el otro commit que es el
00:02:59
de persistencia, que es el que nosotros queremos
00:03:01
ya vemos que no da ningún problema
00:03:03
¿vale? Bueno
00:03:05
¿qué es lo que quiero hacer yo aquí
00:03:07
en medio? Todo esto ha sido para preparar
00:03:09
para que trabaje ya con Ivernet
00:03:11
¿qué es lo que yo quiero hacer? Pues bueno, lo primero
00:03:13
que yo quiero hacer es crear un departamento. Voy a crear un departamento D, que va a ser
00:03:15
un nuevo departamento, al cual le pongo sus características. Esto se me enfada, no debería
00:03:21
enfadarse, simplemente voy a importar el paquete de clases. Bueno, si yo no recuerdo más el
00:03:33
departamento que lo tengo aquí, tengo dos constructores, uno al que le paso el nombre
00:03:41
y otro que le puedo poner los setes correspondientes.
00:03:45
Así que voy a poner directamente un nombre aquí.
00:03:49
Voy a poner un nombre que sea el departamento de finanzas.
00:03:52
Ahora, una vez que yo tengo este departamento,
00:03:59
yo lo que quiero es salvar la sesión con ese departamento.
00:04:02
O sea, quiero guardar el departamento en la sesión.
00:04:07
Y Santa Pascua ya está. Con esto valdría.
00:04:11
Voy a comprobar primero en la base de datos que no exista. Que no exista ese departamento. Voy al departamento y está en el momento vacío. No hay ninguno. Con lo cual, podría intentar ejecutar este programa.
00:04:15
hay muchas posibilidades de que haya errores
00:04:34
¿de acuerdo? ahora veremos por qué puede haber
00:04:37
errores
00:04:39
ejecuto
00:04:39
todos estos rojos no son errores, todos estos primeros
00:04:42
no son errores
00:04:45
voy a ampliar la consola
00:04:46
para que la vean
00:04:49
entonces, bueno, pues echamos un augeado
00:04:50
y efectivamente no hay ningún error
00:04:53
todos estos son avisos del propio
00:04:55
Avernight, después en otro
00:04:57
vídeo les contaré cómo quitar esto
00:04:59
y
00:05:00
Y no ha dado ningún error, simplemente ha debido de generar nuestro departamento.
00:05:02
Voy a comprobarlo, me vuelvo aquí y voy a volver a examinar nuestro proyecto.
00:05:10
Y no nos ha creado más que este que aparece finanzas, ¿de acuerdo?
00:05:22
en la tabla de departamento, examinar, y efectivamente nos ha generado un identificador 1 y nombre finanzas, justo el que nosotros habíamos intentado.
00:05:27
Si yo volviera a ejecutar el programa, algo que les recomiendo que hagan siempre para que se comprueben las cosas, ahora sí que han aparecido muchos errores.
00:05:39
Entonces, a partir de aquí, que fueron las informaciones que había, hay que empezar a ver los errores.
00:05:57
Y lo que nos dice es algo muy simple. Dice que la entrada a finanzas está duplicada porque hay una clave única en ese campo. Y efectivamente ese es el problema que da. Con lo cual, simplemente ya sabemos que lo que tenemos que hacer es ir buscando nuestras excepciones e irlas tratando.
00:06:02
Nosotros sabemos que esto nos ha generado una excepción.
00:06:26
Podemos tratarla. Vamos a tratarla.
00:06:29
Con lo cual me voy a ir a la consola.
00:06:31
Voy a buscar cómo se llamaba esta excepción, que es esta de aquí.
00:06:33
Con lo cual voy a copiarla para que no se me olvide su nombre.
00:06:40
Control-C.
00:06:43
Y, perdón, me vengo aquí al código y voy a tratar la excepción.
00:06:44
Entonces yo podría utilizar un bloque try.
00:06:53
Y aquí ver de esta excepción que aparece genérica, poner esta de aquí, ¿vale? El save que tengo aquí lo meto al try para que lo intente hacer. Voy a cargar, a importar las excepciones de hibernate y aquí puedo poner perfectamente pues algo así como clave duplicada, algo así, ¿vale?
00:06:59
Bueno, voy a ejecutar esto de aquí.
00:07:31
Voy a ejecutar esto de aquí, voy a guardarlo y voy a ejecutarlo.
00:07:36
Bueno, voy a ver mientras la consola completa para ver los errores.
00:07:44
Y vemos que me encuentro otros errores distintos, que no han sido tratados en esa excepción.
00:07:47
Y veo que tienen que ver con las transacciones, ¿de acuerdo? Con las transacciones.
00:07:54
Así que vamos a intentar hacer lo que realmente significa una transacción.
00:07:58
Yo voy a intentar hacer la transacción y si no puedo, voy a hacer un commit, lo que voy a hacer es un rollback. Si uno va al API de Hibernate, por lo que ve es una estructura como esta, donde intenta meter el bloque aquí dentro y si no lo deshace.
00:08:03
¿De acuerdo? Pues vamos a intentar hacer este bloque de aquí.
00:08:25
Vamos a meter la transacción de esta manera.
00:08:29
Voy a generar aquí un bloque try, catch,
00:08:32
o un try, catch, finally.
00:08:44
Ahí, bueno, vale.
00:08:47
Lo mismo me da.
00:08:50
Dentro de ese try, lo primero que vamos a hacer es cargar
00:08:51
la transacción
00:08:55
tengo el virus del dedo
00:08:58
vale, bueno
00:09:01
ahí estamos, esto lo defino
00:09:04
aquí, quitando todo esto
00:09:06
dentro
00:09:08
de esa transacción es donde voy a intentar
00:09:11
cargar
00:09:14
esto de aquí
00:09:16
¿de acuerdo?
00:09:17
y siguiendo este esquema
00:09:20
voy a coger una excepción
00:09:22
cualquiera que se nos quede por aquí
00:09:24
voy a intentar
00:09:26
Pon esto por aquí
00:09:30
En vez de esto que tengo aquí
00:09:33
Vamos a colocar las cosas
00:09:37
Como hay que colocarlas
00:09:41
Aquí tengo mi catch
00:09:45
Las transacciones en este ejemplo las ponía con un nombre
00:09:47
Con el nombre tx, pero yo tengo el nombre t
00:09:52
Si es distinto de nulo
00:09:58
pues voy a hacer un rollback
00:10:00
y voy
00:10:04
a lanzar esa excepción hacia el exterior para que alguien la recoja
00:10:06
y finalmente, si todo ha ido bien
00:10:12
pues voy a coger mi sesión y la voy a cerrar
00:10:15
¿de acuerdo? esto que estoy haciendo aquí
00:10:19
el tcomit lo haría aquí dentro
00:10:22
y en el esquema que él me utiliza
00:10:27
esto estaría aquí
00:10:34
¿de acuerdo?
00:10:40
veo aquí un par de problemas
00:10:47
que voy a ver de qué son
00:10:49
esta variable no ha sido inicializada
00:10:51
entonces voy a inicializar transaction anul
00:10:53
para que ya todo esté funcionando
00:10:56
el esquema es el mismo de antes
00:11:02
aquí tengo el bloque de salvar
00:11:04
que me diga si la clave es duplicada o no
00:11:05
o me debería decir algo así
00:11:08
pero lo más importante es si hago el commit o no lo hago
00:11:09
vamos a ver si esto me dice algo
00:11:12
ejecuto
00:11:14
y voy a ir a la consola
00:11:16
y yo sinceramente
00:11:17
veo que el problema que me da
00:11:22
me sigue dando el mismo
00:11:24
me ha dicho clave duplicada
00:11:26
el mensaje que yo puse
00:11:29
está ahí, hasta ahí está perfecto
00:11:30
y a partir de ahí
00:11:32
este error me está dando
00:11:34
el mismo
00:11:36
me dice aquí que en excepción
00:11:37
en el bloque que es este de Assertion Failure
00:11:40
que dice que no puede
00:11:42
guardar, que no puede realizar
00:11:48
esta sesión, de acuerdo
00:11:50
yo he seguido este esquema al pie de la letra
00:11:53
y realmente no veo
00:11:56
por donde van los tiros
00:12:00
los tiros los he visto en el momento que
00:12:03
lo he mirado rápidamente, aquí estoy lanzando
00:12:07
la excepción, con lo cual otra vez se me muestra
00:12:10
si yo simplemente quito esta línea
00:12:12
o simplemente voy a comentarla
00:12:14
para que no se ejecute
00:12:16
pues directamente
00:12:17
vemos que en la consola
00:12:20
me aparecen estos errores
00:12:22
para indicar cosas de Ibernate
00:12:25
propias de Ibernate, pero ya
00:12:26
no se me para el programa, el programa
00:12:28
seguiría ejecutando, de acuerdo
00:12:30
me cuenta las cuestiones, pero no
00:12:32
me cuenta nada más, así que
00:12:34
vuelvo al código
00:12:36
este sería nuestro esquema de trabajo
00:12:38
en un bloque try arrancamos nuestra transacción
00:12:41
ponemos lo que tengamos que hacer con nuestra aplicación
00:12:44
e intentamos que lo haga, que realmente lo ejecute
00:12:50
si hay algún problema hacemos un rollback
00:12:54
y finalmente, siempre en todo caso, cerramos nuestra sesión
00:12:57
espero que todo este vídeo les haya servido
00:13:01
para entender cómo funciona una parte de Ivernate.
00:13:05
Quiero volver a la parte teórica porque nos hemos perdido en tantos detalles de implementación
00:13:09
que no vemos la parte teórica.
00:13:15
En este momento nosotros estamos guardando un departamento sin decir nada de insert, into,
00:13:18
es decir, sin utilizar SQL para nada.
00:13:26
Directamente es la máquina ORM la que carga un objeto y la convierte a la base de datos
00:13:28
En este caso relacional, la base de datos relacional, guardándola sin hacer nosotros ninguna sentencia SQL
00:13:37
Esto nos va a garantizar hacer ese mapeo objeto relacional
00:13:43
Convertir un objeto en relaciones y viceversa
00:13:48
En otros ejemplos veremos ahora cómo obtener las relaciones de las tablas y convertirlas a objetos
00:13:51
CC por Antarctica Films Argentina
00:13:58
- Idioma/s:
- Autor/es:
- Amadeo Mora
- Subido por:
- Amadeo M.
- Licencia:
- Dominio público
- Visualizaciones:
- 124
- Fecha:
- 31 de marzo de 2021 - 8:58
- Visibilidad:
- Público
- Centro:
- IES CLARA DEL REY
- Duración:
- 13′ 59″
- Relación de aspecto:
- 16:9 Es el estándar usado por la televisión de alta definición y en varias pantallas, es ancho y normalmente se le suele llamar panorámico o widescreen, aunque todas las relaciones (a excepción de la 1:1) son widescreen. El ángulo de la diagonal es de 29,36°.
- Resolución:
- 908x512 píxeles
- Tamaño:
- 28.33 MBytes