He intentado utilizar tanto Hsqldb y H2 para la unidad de prueba, pero el problema que enfrentan con la secuencia de los generadores. Declaración de campo se parece a esto.

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="keyword_seq")
@SequenceGenerator(name="keyword_seq",sequenceName="KEYWORD_ID_SEQ", allocationSize=1)
@Column(name="IM_KEYWORD_ID")
private Long keywordId;

Cuando trato de probar sencillo insertar en esta tabla en Hsqldb con la siguiente configuración, da error

<prop key="hibernate.connection.driver_class">org.hsqldb.jdbc.JDBCDriver</prop>
<prop key="hibernate.connection.url">jdbc:hsqldb:mem:testdb;sql.syntax_ora=true</prop>

De Error :

   Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: KEYWORD_ID_SEQ.NEXTVAL
        at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
        at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

Con H2:

<prop key="hibernate.connection.driver_class">org.h2.Driver</prop>
<prop key="hibernate.connection.url">jdbc:h2:~/test</prop>

De Error es :

Hibernate: select KEYWORD_ID_SEQ.nextval from dual
3085 [main] WARN org.hibernate.util.JDBCExceptionReporter  - SQL Error: 42001, SQLState: 42001
3088 [main] ERROR org.hibernate.util.JDBCExceptionReporter  - Syntax error in SQL statement "SELECT KEYWORD_ID_SEQ.NEXTVAL FROM[*] DUAL "; expected "identifier"; SQL statement:

Alguna idea de cómo solucionar esto?

  • Todas mis clases son anotación de base.

1 Comentario

  1. 7

    Creo que el dialecto es el conjunto erróneamente. Se puede comprobar su configuración de hibernate.

    • Yo estoy usando el siguiente. <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
    • Usted necesita para cambiar a org.hibernate.dialecto.HSQLDialect para HSQL y org.hibernate.dialecto.H2Dialect para el H2. Como se nota la hibernación está disparando Oracle consultas en contra de HSQL & H2 base de datos, por lo tanto los errores.
    • He cambiado a dialecto, que usted ha mencionado, pero sigue recibiendo el error. Para HSQLDB, el error es user lacks privilege or object not found: KEYWORD_ID_SEQ. Para el H2, su ERROR org.hibernate.util.JDBCExceptionReporter - Sequence "KEYWORD_ID_SEQ" not found; SQL statement:call next value for KEYWORD_ID_SEQ [90036-147]. Qué necesitamos para crear algunas de las secuencias en el momento de inicio de nosotros mismos?
    • Sí, usted necesita usar el modo de hibernación.hbm2ddl.auto de crear, de modo que el esquema de base de datos se crea durante el inicio.
    • Muchas gracias gkamal, estoy usando anotado clase, de modo que supongo que hibernate.hbm2ddl.auto no es necesario. Simplemente cambiar el Dialecto hizo el trabajo. Se trataba de algún error de la anterior o fue la sensación de somnolencia.
    • Genial, creo que ya están utilizando hbm2ddl.auto, sin que esto no iba a funcionar. Que no es sólo para hbm la misma bandera se aplica a las anotaciones. HSQL / H2 están en la memoria de las bases de datos de modo que el esquema debe ser dinámicamente la configuración cada vez. También puede usted por favor la marca de mi respuesta como la respuesta correcta.

Dejar respuesta

Please enter your comment!
Please enter your name here