es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excepción al crear la base de datos H2 con la consulta SQL generada en un proyecto de Spring.

Utilizo Spring y la base de datos H2 en mi proyecto y creo una entidad simple, pero cuando intento iniciar mi aplicación obtengo esto:

Error de sintaxis en la declaración SQL "CREATE TABLE T_TRANSACTION (ID BIGINT GENERATED BY DEFAULT AS IDENTITY, AMOUNT INTEGER NOT NULL, FROM [*] VARCHAR(255), TO VARCHAR(255), PRIMARY KEY (ID))"; se esperaba "identificador"; SQL statement:
create table t_transaction (id bigint generated by default as identity, amount integer not null, from varchar(255), to varchar(255), primary key (id))

Mi entidad:

@Entity
@Table(name = "t_transaction")
class Transaction{

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private val id: Long? = null

  var from: String? = null

  var to: String? = null

  var amount = 0

}

Propiedades de la aplicación:

spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:Db;DB_CLOSE_DELAY=-1

También utilizo el mismo método de generación de identificador en otra entidad, pero no obtengo el mismo error.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica un error de sintaxis en la sentencia SQL que intenta crear una tabla para la entidad Transaction. El error de sintaxis está relacionado con la columna ‘FROM’ en la definición de la tabla, que es una palabra reservada en SQL y necesita ser escapada con comillas invertidas.

    Puede solucionar este error modificando su clase de entidad para usar comillas invertidas alrededor del nombre de la columna ‘FROM’, así:

    @Entity
    @Table(name = "t_transaction")
    class Transaction {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private val id: Long? = null
    
        var `from`: String? = null
    
        var to: String? = null
    
        var amount = 0
    }
    

    Alternativamente, puede cambiar el nombre de la columna ‘FROM’ por algo que no sea una palabra reservada en SQL, como ‘sender’.

    Es posible que el error ocurra solo para la entidad Transaction porque es la única que tiene una columna llamada ‘FROM’. Si su otra entidad con el mismo método de generación de ID no tiene una columna ‘FROM’, no encontraría el mismo problema.

Comments are closed.