org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement in SpringBoot with h2 and JPA

50,550

Solution 1

@shubh.. Your Entity Field names are matching with SQL reserved keywords,

So try to change the field names otherwise use name attribute with @Column Annotation (which gives alias names to the DATABASE)

    @Column(name="valueFrom") 
    private String from;

    @Column(name="valueTo") 
    private String to;

    private BigDecimal conversionMultiple;
    private int port;

Solution 2

Your Entity Field name from was matched with database reserved word from, change the field name to another, or add a @Column annotation on that field. Like:

...

@Column(name = "_from")
private String from;

...

Share:
50,550
shubh
Author by

shubh

Passionate Java developer and technology enthusiast, working in Spring Boot, Microservice, Kafka, Extensions and React.

Updated on February 12, 2022

Comments

  • shubh
    shubh over 2 years

    While running spring boot with h2 database and JPA i am getting below error.

    org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
        at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    

    It is caused due to below one

    Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "CREATE TABLE EXCHANGE_VALUE (ID INTEGER NOT NULL, CONVERSION_MULTIPLE DECIMAL(19,2), FROM[*] VARCHAR(255), PORT INTEGER NOT NULL, TO VARCHAR(255), PRIMARY KEY (ID)) "; expected "identifier"; SQL statement:
    create table exchange_value (id integer not null, conversion_multiple decimal(19,2), from varchar(255), port integer not null, to varchar(255), primary key (id)) [42001-197]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) ~[h2-1.4.197.jar:1.4.197]
        at org.h2.message.DbException.getSyntaxError(DbException.java:217) ~[h2-1.4.197.jar:1.4.197]
    

    My hibernate class

    import java.math.BigDecimal;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="Exchange_Value")
    public class ExchangeValue {
    
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private int id; 
        private String from;
        private String to;
        private BigDecimal conversionMultiple;
        private int port;
    
        public ExchangeValue() {
    
        }
    
        public ExchangeValue(String from, String to, BigDecimal conversionMultiple) {
            super();
    //      this.id = id;
            this.from = from;
            this.to = to;
            this.conversionMultiple = conversionMultiple;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }   
    }
    

    application.properties is below

    spring.application.name=currency-exchange-service
    server.port=8000
    spring.jpa.hibernate.ddl-auto= create-drop
    

    Just want to know as to what i am missing in the code tried adding spring.jpa.hibernate.ddl-auto= create-drop but it did not helped.

  • shubh
    shubh over 5 years
    Thanks this worked. I like stack overflow too much few things that u forget people can observe.
  • superevil
    superevil over 2 years
    Happened to me as well using 'release'
  • Jan
    Jan almost 2 years
    Had the same problem with a attribute/column named value which is also a reserved keyword.