Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Java y JPA: consultas avanzadas, rendimiento y modelos complejos

Buenas tengo un problema para relacionar la base de datos H2 con Intellij community edition en una mac con OS Ventura 13.5. A pesar de poder crear las bases de datos en h2 e incluirlas en el archivo Persistence, no puedo visualizar las tablas creadas en el IDE. El Método MAIN corre normalmente y las tablas son creadas y actualizadas pero a la hora de utilizar h2 aunque la conección a la base de datos es exitosa, no existen las tablas. No logré encontrar solución en internet ni el el Discord especifico. Ojalá puedan darme una mano Adjunto el archivo Persistence.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="tienda" transaction-type="RESOURCE_LOCAL">
        <class>com.latam.alura.tienda.modelo.ItemsPedido</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.url"
                      value="jdbc:h2:./Users/mauricio/Desktop/database?createDatabaseIfNotExist=true
"/>
            <property name="hibernate.archive.autodetection" value="class"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value="1234"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        </properties>
    </persistence-unit>
</persistence>
1 respuesta

Hola Mauricio,

Por lo que describes, parece que tu aplicación está funcionando correctamente, pero no puedes ver las tablas en la base de datos H2 a través de IntelliJ.

Un detalle importante a considerar es que estás utilizando la estrategia de hibernate.hbm2ddl.auto como create-drop. Esto significa que Hibernate creará las tablas al inicio de la sesión y las eliminará al final. Por lo tanto, si estás intentando ver las tablas después de que tu aplicación se haya cerrado, es posible que ya no existan.

Si quieres mantener las tablas después de cerrar tu aplicación, puedes cambiar la estrategia a update o create. Con update, Hibernate solo realizará cambios en la base de datos si tu modelo ha cambiado. Con create, Hibernate eliminará las tablas existentes y las creará de nuevo cada vez que inicies tu aplicación.

Además, te recomendaría que revises la URL de tu base de datos en el archivo de persistencia. La URL jdbc:h2:./Users/mauricio/Desktop/database?createDatabaseIfNotExist=true parece indicar que la base de datos se encuentra en la ruta relativa ./Users/mauricio/Desktop/database. Si estás ejecutando tu aplicación desde una ubicación diferente, es posible que la base de datos se esté creando en un lugar inesperado. Intenta cambiar la URL a una ruta absoluta, como jdbc:h2:/Users/mauricio/Desktop/database?createDatabaseIfNotExist=true (nota el cambio de ./Users a /Users).

Espero que estas sugerencias te ayuden a resolver el problema. Recuerda que estas son solo sugerencias y puede que no sean la solución definitiva a tu problema.

Espero haber ayudado y buenos estudios!