Quiero guardar algunos datos en la base de datos H2 por hacer un CRUD repositorio, usando Hibernate.

Yo no puedo conseguir la base de datos para almacenar mis entradas de ningún tipo. Actualmente, estoy tratando de lograr que durante la actualización de la base de datos haciendo una entrada de ejemplo. De entrada se ve bien en los registros, pero la tabla no se crea/actualiza/generada.

Por qué de Hibernación no es incapaz de crear una tabla en este caso? (si el problema se encuentra en la estructura de mis datos)

Aquí está mi Entidad, Game.java clase (he probado sin @Columna de anotaciones, no hay diferencia. Id no es auto-generado, tengo que ser capaz de entrar en mi propio ID cada vez):

Y aquí Cover.java clase:

He configurado base de datos H2 aquí, en aplicación.propiedades de archivo:

Repositorio está configurado de esta forma:

Puedo probar mi repositorio por ir bajo localhost:8080/prueba, donde una entrada de la muestra debe ser insertado en la tabla:

Me sale el siguiente log:

2017-07-25 13:09:58.873 DEBUG 9442 --- [nio-8080-exec-1] org.hibernate.SQL                        : select game0_.id as id1_0_0_, game0_.aggregated_rating as aggregat2_0_0_, game0_.cloudinary_id as cloudina3_0_0_, game0_.height as height4_0_0_, game0_.url as url5_0_0_, game0_.width as width6_0_0_, game0_.first_release_date as first_re7_0_0_, game0_.name as name8_0_0_, game0_.storyline as storylin9_0_0_ from game game0_ where game0_.id=?
Hibernate: select game0_.id as id1_0_0_, game0_.aggregated_rating as aggregat2_0_0_, game0_.cloudinary_id as cloudina3_0_0_, game0_.height as height4_0_0_, game0_.url as url5_0_0_, game0_.width as width6_0_0_, game0_.first_release_date as first_re7_0_0_, game0_.name as name8_0_0_, game0_.storyline as storylin9_0_0_ from game game0_ where game0_.id=?
2017-07-25 13:09:58.875 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [BIGINT] - [127]
2017-07-25 13:09:58.894 DEBUG 9442 --- [nio-8080-exec-1] org.hibernate.SQL                        : insert into game (aggregated_rating, cloudinary_id, height, url, width, first_release_date, name, storyline, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into game (aggregated_rating, cloudinary_id, height, url, width, first_release_date, name, storyline, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
2017-07-25 13:09:58.895 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [DOUBLE] - [90.25]
2017-07-25 13:09:58.896 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - [doczeiofd1ckpapdhqs7]
2017-07-25 13:09:58.896 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [INTEGER] - [1426]
2017-07-25 13:09:58.897 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [4] as [VARCHAR] - [//images.igdb.com/igdb/image/upload/t_thumb/doczeiofd1ckpapdhqs7.jpg]
2017-07-25 13:09:58.897 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [5] as [INTEGER] - [1000]
2017-07-25 13:09:58.897 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [6] as [BIGINT] - [1258416000000]
2017-07-25 13:09:58.897 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [7] as [VARCHAR] - [Assassin's Creed II]
2017-07-25 13:09:58.897 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [8] as [VARCHAR] - [The lineage continues as this new chapter introduces Ezio, inheritor of the talents and creed of the Assassins. His family murdered by rival families, Ezio resolves to learn the ancient art of the Assassin in order to seek revenge. He will not do so alone though, allying with historical figures such as philosopher and writer Niccolò Machiavelli. You will also be able to master the art of the assassin with all new weapons and instruments created by the renowned inventor and genius of the Renaissance, Leonardo Da Vinci himself.]
2017-07-25 13:09:58.897 TRACE 9442 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [9] as [BIGINT] - [127]

Parece de datos está designada para los parámetros, pero en H2 consola SELECT * FROM JUEGO me devuelve:
SELECCIONE * DE JUEGO;
La tabla de «JUEGO» no se encuentra; instrucción SQL:
SELECCIONE * DE JUEGO [42102-193] 42S02/42102 (Ayuda)

He probado otras H2 modos de como crear colocar o crear, pero sin éxito. Lo que me preocupa es que, ni siquiera puedo conseguir la base de datos para crear una tabla vacía con las filas correctas, listo para las entradas.

Creo que hay algo mal con mi Entidad o que falta desde mi GameRepository de configuración, pero no tengo más ideas para solucionar este error.

Quiero lograr lo que hay aquí:
http://javasampleapproach.com/spring-framework/spring-boot/integrate-h2-database-springboot-spring-jpa-embedded-mode
Y aquí:
http://www.simplecodestuffs.com/value-object-entity-object-in-hibernate-mapping/

También, he tratado de este conjunto de tutoriales para un cambio:
https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/
https://springframework.guru/spring-boot-web-application-part-3-spring-data-jpa/

Pero sin suerte hasta el momento.

  • seleccione * de juego no devuelve nada significa que no hay datos, no hay no tabla
  • cómo es que no hay datos de si los parámetros están enlazadas? la tabla no está allí porque Hibernate se niega a crear, ya que algo no está bien en los datos.
  • puede compartir su estructura de paquete?
  • seguro: i.imgur.com/3hMQEUT.png
  • Agregar el dialecto de la propiedad y de uso crear no actualizar. Sé que la actualización debería crear la tabla, pero al menos darle una oportunidad
  • como que? de la primavera.jpa.base de datos de plataforma=org.hibernate.dialecto.H2Dialect de la primavera.jpa.hibernate.ddl-auto = crear
  • no hacer una diferencia, eh
  • Encontré esto mientras miraba algo parecido – no estoy seguro si esto fue resuelto, pero tuve problemas en la configuración de la base de datos de nombre y que no podía ver las tablas, pero si miraba en testdb para la base de datos en memoria, me encontré con mis tablas y datos.
  • fue resuelto, gracias a la respuesta y los comentarios de abajo de mi post

InformationsquelleAutor VapeKop | 2017-07-25

3 Comentarios

  1. 10

    Parece de datos está designada para los parámetros, pero en H2 consola, SELECCIONE *
    DESDE el JUEGO me devuelve nada. En la tabla no existe.

    Usted está usando un in-memory instancia de H2 :

    spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

    En este modo, usted no puede ver el contenido de los cambios de otro cliente que que que comenzó el in-memory de la base de datos.

    Para ver los cambios de otros clientes, usted tiene que utilizar el modo TCP.

    Tiene dos soluciones :

    • el uso de un archivo de persistir en la instancia de H2.

    Donde están los Archivos de Base de datos Almacenada?

    Cuando se utiliza la base de datos de URLs como jdbc:h2:~/prueba, la base de datos se almacena
    en el directorio de usuario. Para Windows, este es generalmente C:\Documents y
    Settings\ o C:\Users\. Si el directorio base es
    no se establece (como en jdbc:h2:./de prueba), los archivos de base de datos se almacenan en la
    directorio donde se inicia la aplicación (el trabajo actual
    directorio). Cuando se utiliza el H2 aplicación de Consola desde el menú inicio,
    esto es /bin. El directorio base se puede establecer en
    la URL de base de datos. Un fijo o ruta de acceso relativa puede ser utilizado. Cuando se utiliza el
    URL de jdbc:h2:archivo:./datos del/de la muestra, la base de datos se almacena en el
    datos del directorio (relativa al directorio de trabajo actual). El
    directorio se crea automáticamente si no existe todavía. Es
    también es posible utilizar el completo nombre de directorio (y para
    De Windows, nombre de la unidad). Ejemplo: jdbc:h2:el archivo:C://datos de la prueba de

    • mantener el uso de una instancia en memoria, pero utilizando el modo TCP.

    Reemplazar :

    spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

    por :

    spring.datasource.url=jdbc:h2:tcp://localhost/~/test

    General, me cambie a este modo durante la entidad JPA unidad de pruebas cuando realmente quiero saber que fue insertado en la base de datos.

    De la documentación oficial :

    En Memoria De Las Bases De Datos

    Para ciertos casos de uso (por ejemplo: la creación rápida de prototipos, pruebas de alta
    el rendimiento de las operaciones de sólo lectura, bases de datos), puede no ser necesaria
    para conservar los datos, o persistir los cambios a los datos. Esta base de datos
    soporta el modo de memoria, donde los datos no se conserva.

    En algunos casos, sólo una conexión a una base de datos en memoria es
    necesario. Esto significa que la base de datos para ser abierto, es privado. En este
    caso, la base de datos es la dirección URL de jdbc:h2:mem: la Apertura de dos conexiones dentro de
    la misma máquina virtual supone la apertura de dos diferentes (privado)
    las bases de datos.

    A veces con varias conexiones a la misma base de datos en memoria son
    necesario. En este caso, la URL de base de datos debe incluir un nombre. Ejemplo:
    jdbc:h2:mem:db1. El acceso a la misma base de datos utilizando esta dirección sólo funciona
    dentro de la misma máquina virtual y la clase gestor de medio ambiente.

    Para tener acceso a una base de datos en memoria de otro proceso o de otro
    computadora, usted necesita para comenzar un servidor TCP en el mismo proceso que el
    base de datos en memoria fue creado. Los otros procesos, a continuación, necesita
    acceso a la base de datos a través de TCP/IP o TLS, utilizando una URL de base de datos tales como:
    jdbc:h2:tcp://localhost/mem:db1.


    Alternativa independiente H2 de la Consola : el uso de la H2 de la consola accesible desde la Primavera de Inicio de la aplicación

    De hecho, la base de datos H2 proporciona una basada en el navegador de la consola que La primavera de Arranque puede
    configurar automáticamente por usted
    . La consola se auto-configura cuando estos
    condiciones :

    • Que son el desarrollo de un servlet basado en la aplicación web.
    • com.h2database:h2 está en el classpath.
    • Está utilizando la Primavera de Arranque de las herramientas de desarrollador de.

    Lo que significa que sólo será accesible en dev. Lo que generalmente se desea.

    Por defecto, la consola está disponible en /h2-console.

    Establecer el spring.h2.console.path de la propiedad a cambio de que.

    • 2017-07-25 13:58:41.311 ERROR 10690 — [ restartedMain] o.una.tomcat.jdbc.de la piscina.ConnectionPool : no se puede crear conexiones iniciales de la piscina. org.h2.jdbc.JdbcSQLException: Conexión se rompe: «de java.net.ConnectException: Conexión rechazada (Connection refused): localhost» [90067-193]
    • /~/prueba es porque estoy probando el db por debajo de localhost:8080/prueba?
    • No. Creo que tienes una ya abierta la conexión. Intentar matar a la Primavera de Arranque de los procesos que se están ejecutando. E inténtelo de nuevo.
    • He dejado mi app en IntelliJ y mató a Tomcat en la Terminal – todavía errores con «conexión rechazada», aunque.
    • Me cambié a la siguiente: en la primavera.origen de datos.url=jdbc:h2:archivo:~/h2/prueba
    • Con el resultado: 2017-07-25 14:08:42.511 de DEPURACIÓN 11125 — [ restartedMain] org.hibernate.SQL : create table juego (id bigint not null, aggregated_rating doble, cloudinary_id varchar(255), altura entero, url varchar(255), el ancho entero, first_release_date bigint, nombre varchar(255), historia varchar(4000), primary key (id)) Hibernación: crear un juego de mesa (id bigint not null, aggregated_rating doble, cloudinary_id varchar(255), altura entero, url varchar(255), el ancho entero, first_release_date bigint, nombre varchar(255), historia varchar(4000), primary key (id))
    • Parece prometedor, pero todavía no estoy capaz de tener acceso a la tabla. Tal vez de menor caso es el problema ahora?
    • ¿cuál es su error ?
    • después de cambiar a un archivo? el mismo, SELECCIONE * DE JUEGO me devuelve: SELECT * FROM de juegos; Tabla de «JUEGO» no se encuentra; instrucción SQL: SELECT * FROM JUEGO [42102-193] 42S02/42102 (Ayuda)
    • resulta que yo tenía que iniciar sesión en H2 con la misma URL que se especifica en la solicitud.propiedades – todo lo que funciona, muchas gracias!
    • Con el mismo URL, por supuesto, es mucho mejor 🙂 son bienvenidos.

  2. 3

    Comprobar si la clase principal(la Primavera de inicio de la aplicación de la clase) es capaz de escanear las entidades definidas. Esto generalmente sucede cuando las entidades están en un paquete diferente que la de la clase principal.

    • El problema fue resuelto ya, hace un año (como he escrito en los comentarios a la aceptación de la respuesta en aquel entonces). Gracias por tu ayuda de todos modos.
    • VapeKop, la Gente agregar respuestas después de que el problema fue resuelto debido a los cambios en las versiones y varias otras razones. Por tanto, un nuevo post puede ayudar a alguien.

Dejar respuesta

Please enter your comment!
Please enter your name here