0% encontró este documento útil (0 votos)
35 vistas5 páginas

Property Name Value: "Javax - Persistence.jdbc - Url" "Jdbc:h2:mem:test"

Este documento proporciona información sobre el uso de JPA y Hibernate para interactuar con bases de datos. Explica cómo configurar las propiedades de la URL de la base de datos, la generación de esquemas, y mostrar consultas SQL en los registros. También cubre temas como las dependencias requeridas, las relaciones entre tablas, y los métodos como persist, merge, flush y commit para administrar el ciclo de vida de los objetos y las transacciones.

Cargado por

ducksalert
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
35 vistas5 páginas

Property Name Value: "Javax - Persistence.jdbc - Url" "Jdbc:h2:mem:test"

Este documento proporciona información sobre el uso de JPA y Hibernate para interactuar con bases de datos. Explica cómo configurar las propiedades de la URL de la base de datos, la generación de esquemas, y mostrar consultas SQL en los registros. También cubre temas como las dependencias requeridas, las relaciones entre tablas, y los métodos como persist, merge, flush y commit para administrar el ciclo de vida de los objetos y las transacciones.

Cargado por

ducksalert
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

URL BBDD H2: [Link]

com/

La propiedad <property name="[Link]"


value="jdbc:h2:mem:test" /> indica en la url que la BBDD va a ser creada en memoria y
por tanto cada ejecución que se realice de este proyecto se va a encontrar la BBDD limpia.

La propiedad <property name="[Link]-


[Link]" value="create"/> indica que las tablas de la BBDD van a
ser creadas a través del mapeo realizado en las clases anotadas con @Entity

La propiedad <property name="hibernate.show_sql" value="true" /> indica que los


logs deben mostrar las sentencias sql ejecutadas.

Para poder usar JPA, debemos añadir una dependencia de hibernate en el pom.
La dependencia de hibernate, necesita como mínimo la versión 1.8 de java, por lo que
configuramos el pom para que use dicha versión al compilar el proyecto. Esta dependencia de
hibernate implementa la versión 2.1 de JPA.

Para usar la BBDD ligera H2 necesitamos añadir en el pom la dependencia de la captura de


arriba.

JPA puede implementarse con Hibernate o EclipseLink

Para usar EclipseLink hay que usar la siguiente dependencia:

Y también hay que añadir la siguiente dependencia en el fichero [Link]

Esta propiedad se encarga (al igual que la anterior propiedad de hibernate que habíamos visto)
de mostrar en el log las sentencias sql que lanza la aplicación.

Al usar EclipseLink, para que la aplicación no de error al ejecutarla, requiere que indiquemos
en el fichero [Link] todas las clases anotadas con @Entity de la siguiente forma:

Ya que, de lo contrario, no reconocería las entidades y daría un error en la ejecución.

Con este elemento dentro del fichero [Link] podemos definir explícitamente el
provider que se va a usar con JPA:

(Esto podemos usarlo por ejemplo cuando en el pom tenemos tanto la dependencia de
hibernate-core como la de EclipseLink)

El método getReference() crea un objeto del tipo “Persona” sin ir a la BBDD utilizando la
técnica Lazy loading (Crea un objeto del tipo Persona sin cargar sus datos, pero con la
inteligencia necesaria para ir a la BBDD en el momento en el que un cliente necesite algún dato
que no esté cargado, por ejemplo al ejecutar un método get de algún campo de la tabla
persona que no sea la primary key). El objeto que devuelve este método solo tiene su clave
primaria de BBDD que es la pasada por parámetros (en este ejemplo la clave primaria de la
persona es: nombre).
Relación entre 2 tablas con JPA/Hibernate:

Un coche puede tener un propietario y un propietario puede tener muchos coches, por lo
tanto, la relación entre estas dos tablas es N:1

con la propiedad mappedBy indicamos que la variable coches se corresponde con la relación
propietario de la clase Coche

Con el método [Link]() podemos actualizar un objeto que hemos insertado en BBDD con
el método persist() con la información que tiene guardada en BBDD.

Cuando aparece el siguiente error es porque estamos insertando en BBDD un objeto a aún no
ha sido guardado en BBDD

Por ejemplo, como en el siguiente caso que estamos insertando en BBDD el objeto coche al
que se le ha asignado un objeto persona que no existe en BBDD.
El método merge() se usa para actualizar un registro en BBDD, el método persist() se usa para
insertar y el método remove() para eliminar.

Con el siguiente código, se actualiza el municipio de la persona al hacer llamar al método set
aunque no se haya hecho un merge (esto sucede porque al final del código hacemos un
commit. Si no hacemos el commit, no se actualizaría en BBDD).

Cuando hacemos un commit, primero ejecuta los inserts, luego los updates y por último los
deletes, independientemente del orden en el que se haya programado estas acciones en el
código.

Por ejemplo en el siguiente código, primero se va a hacer el insert de toni, luego se va a


actualizar a juana y por último se va a eliminar a pedro.
Si quisiéramos ejecutar el delete antes del insert y el update, tendríamos que hacer un flush()
después del remove como se muestra en el siguiente código:

Al llamar al método commit(), se realiza automáticamente un flush antes de commitear los


cambios que se han producido.

Cuando hacemos un getResultList() también se llama automáticamente al método flush() antes


de ejecutar la query.

El método flush() fuerza la ejecución de una sentencia sql (select, insert, delete o update) pero
los cambios no se guardan hasta que no se hace un commit().

El REQUIRES_NEW se utiliza para ejecutar un cambio en BBDD (insert, delete o update) en una
transacción independiente, para que, si por ejemplo se ejecutan varios insert y uno de ellos
falla, no afecte al resto y se puedan ejecutar los que faltan.

También podría gustarte