Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
16
respuestas

[Duda] No me esta creando las tablas en la base de datos :(

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

codigo de registro: public class RegistroDeProducto {

public static void main(String[] args) {
    registrarProducto();
    EntityManager em = JPAUtils.getEntityManager();
    ProductoDAO productoDAO = new ProductoDAO(em);
    Producto producto = productoDAO.consultaporId(1l);
    
    System.out.println(producto.getNombre());

    BigDecimal precio= productoDAO.consultarPrecioPorNombreDeProducto("Xiaomi Redmi");
    System.out.println(precio);
}

private static void registrarProducto() {
    Categoria celulares= new Categoria("Celulares");
    
    Producto celular= new Producto("Xiaomi Redmi","Muito Bueno", new BigDecimal("800"),celulares);
    
    EntityManager em = JPAUtils.getEntityManager();
    ProductoDAO productoDAO = new ProductoDAO(em);
    CategoriaDAO categoriaDAO = new CategoriaDAO(em);
    
    em.getTransaction().begin();
    
    categoriaDAO.guardar(celulares);
    productoDAO.guardar(celular);
    
    em.getTransaction().commit();
    em.close();
}

}

CODIGO DE PERSISTENCE

                                            <!--JTA servidor externo -->
<persistence-unit name="tienda" transaction-type="RESOURCE_LOCAL">

    <!--  <class>com.alura.tienda.Producto</class>opcional -->

    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:C:\Users\tmarroquin\Desktop\JAVA-TIENDA\DATABASE" />
        <property name="javax.persistence.jdbc.user" value="sa" />
        <property name="javax.persistence.jdbc.password" value="1234" />
        
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
    </properties>

</persistence-unit>
16 respuestas

Hola, buen dia.

No tiene que ver con la clase Main, se crean las tablas directamente de las clases debido a los Annotations. Puedes mostrarme, en el explorador de archivos, donde se creó la base de datos? Y tambien cual ruta estas utilizando para acceder en consola H2

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Buen dia.

Aqui está el detalle.

Al momento de crear la base de datos, en "Database path" debes agregar la ruta y al final el nombre de la base de datos, ejemplo: C:\Users\User1\Desktop\NuevaCarpeta \Database1

Esto provocará la creación de la base de datos con nombre Database1 en la carpeta con direccion "C:\Users\User1\Desktop\NuevaCarpeta"

Al ingresar el URL en el archivo "persistence.xml" debes agregarlo completo: "C:\Users\User1\Desktop\NuevaCarpeta\Database1"

En caso contrario al ejecutar el código se creará una base de datos nueva en automático, por ejemplo si agregas: C:\Users\User1\Desktop\NuevaCarpeta

Se creará la base de datos con nombre "NuevaCarpeta" en la dirección "C:\Users\User1\Desktop" Y en esa base de datos se crearan las tablas.

Igualmente al acceder a H2 Console debes incluir la ruta completa incluyendo el nombre de la base de datos.

Todas estas acciones las puedes ver reflejadas directamente en el explorador de archivos donde se puede ver la base de datos como archivo.

Esto es lo que alcancé a concluir durante el desarrollo del aula, y con apoyo de la documentación oficial de H2 Database. Algunos detalles como esto no se mencionan en la clase talvez se le pasó al maestro pero es algo sencillo.

ya cambio los nombres ya corregi todo Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

la ruta Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

la ruta de la conexion y sigue igual, me corre pero no me crea ninguna tabla Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Rectifica si al momento de ejecutar el programa en la consola se ve reflejada la creación de las tablas como lo hace el maestro en el video.

Fuera del detalle que te comenté, es básicamente revisar que todo esté exactamente como lo hace el profe en la clase, las configuraciones y el código

Estuve buscando otro poco, ten cuidado con crear el archivo de la base de datos ".trace" el archivo debe ser solo 1 con extensión ".mv" eso tambien me ha generado conflictos, estoy indagando el porqué se crea y cual es su función, se crea automaticamente, lo que he hecho al momento para evitar que esto de problemas es eliminar los archivos y volver a correr el programa y se vuelve a crear la base de datos como tal.

Procura que al correr el programa la base de datos en consola H2 esté cerrada. Es lo que tengo al momento, sigo buscando las causas, los archivos tambien se muestran como ".trace.db" y ".mv.db"

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

me sale el mismo error, no se como resolverlo

tengo una mac si correr H2 en el es diferente, asi que estoy bastante perdido porque no funciona dado que los pasos pueden variar de sistema operativo a otro.

hola porque me aparecen don archivos persistence xml. ??? Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad r

Que tal compañeros, me pasa lo mismo mis tablas no se crean en la consola de h2, en otro post vi que daban como solución cambiar la versión a 2.2.222 pero al cambiar a esta versión me da un error y ahora ya ni en eclipse crea las tablas, indague un poco este error y me comentan que al compilar mi código no se encuentra mi archivo persistence que verifique este dentro de la ruta de meta-inf pero ya revise y si esta mi archivo persistence correcto, espero puedan ayudarme y ayudarnos ya que veo que son varios con el mismo problema, muchas gracias.Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Para los que no lo han podido resolver y estan igual lo único que hice fue dejar el código del persistence así

value="jdbc:h2:C:\Users\tmarroquin\Desktop\JAVA-TIENDA"Aqui el nombre de tu carpeta donde guatdas tu database" " y eso es todo, me funciono bien

solo borren primero todos los datos dentro de esa carpeta y miren la ruta que usar el servidor que varía

Buenas tardes compañero en mi caso, actualice la version de h2 en el archivo pom.xml. De la versión 2.1.214 --> 2.2.224. Despues de ese paso, usar el url con el nombre de BD que creaste. En mi caso, pase de este url "jdbc:h2:file:C:\Users\H\Documents\jpadb" a este "jdbc:h2:file:C:\Users\H\Documents\jpadb\database". Espero que te sirva de ayuda.

Concuerdo con Sebastian, lo que hice fue actualizar el pom a la version 2.2.224, luego crear la base de datos con tu path especifico agregando el nombre de la misma al final, despúes ejecutar la clase main registrarProducto y por último conectarse a la base de datos con H2 Console

Gracias a todos, por fin me salió. Se pierde uno de repente pero es entretenido buscar la solución. Creo que me fallaba actualizar el H2 en el pom.xml

por mas que intento guiandome de los comentarios anteriores de los compañeros me sigue saliendo asi Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Yo lo pude resolver con los ultimos comentarios de arriba. Pero te explico el paso a paso:

  1. Abres el H2 Console y en su icono de la barra de tareas le das en Crear Nueva Base de Datos. En el Database path o ruta de base de datos pones la dirección donde se guardará y el que será el nombre. En mi caso es la ruta "C:\Users\Public\JPA" (La carpeta JPA la cree antes manualmente en el explorador de Windows), y el nombre con el que la crearás, yo elegí "database2" así que queda: C:\Users\Public\JPA\database2 y pones tu contraseña y das Crear. (Una vez creada, cierra el H2 Console con clic derecho y Salir, o dará error más adelante al ejecutar la clase)

  2. Luego asegurarte que la versión del "H2" en el pom.xls sea la que tengas instalada y sino la editas (en mi caso edité a la que instalé: 2.2.224).

  3. Después en el persistence.xml. Debes poner la misma dirección donde creaste tu database. Que en mi caso debe quedar como: <property name="javax.persistence.jdbc.url" value="jdbc:h2:C:\Users\Public\JPA\database2"/>

  4. Recuerda asegurarte de que H2 Console no se esté ejecutando. Y entonces ejecutas la clase main RegistroDeProducto en Eclipse.

  5. Por ultimo abre de nuevo H2 Console y en la consola que se abre en el navegador editas el JDBC URL a la misma que pusiste en el persistence.xml que en mi caso de nuevo es: jdbc:h2:C:\Users\Public\JPA\database2 y tu contraseña abajo y ya das en Conectar y listo.