org.hibernate.tool.schema.spi.CommandAcceptanceException: Ошибка выполнения DDL с помощью инструкции JDBC в SpringBoot с h2 и JPA - PullRequest
0 голосов
/ 22 октября 2018

При выполнении весенней загрузки с базой данных h2 и JPA я получаю ошибку ниже.

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]

Это вызвано из-за ниже

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]

Мой класс гибернации

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 ниже

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

Просто хочу узнать, что мне не хватает в коде, попытался добавить spring.jpa.hibernate.ddl-auto = create-drop, но это сделалне помогло.

Ответы [ 4 ]

0 голосов
/ 22 июня 2019
Ответ

@ ganesh045 на самом деле не соответствует действительности, поскольку запрос на создание таблицы в hibernate работает следующим образом: CREATE TABLE <your_table> 'password', например, для каждого из ваших атрибутов.Добавление `` к атрибуту заставит SQL прочитать его NOT как зарезервированное ключевое слово.Он также делает то же самое, когда запрашивает ваши предложения выбора внутри JpaRepository.Он позвонит, например, так: SELECT 'attribute' FROM <your_table>.Скорее всего, ваша проблема заключается в том, что вы указали имя своей схемы как kebab-case или что-либо, кроме camelCase и snake_case.Кроме того, при таком подходе вы можете получить таблицу с именем User с атрибутами username и password, которые на самом деле также MYSQL reserved keywords.

0 голосов
/ 22 октября 2018

@ shubh .. Ваши имена полей сущностей совпадают с SQL reserved keywords,

Поэтому попробуйте изменить имена полей, в противном случае используйте name атрибут с @Column Annotation (который дает псевдонимы базе данных)

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

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

    private BigDecimal conversionMultiple;
    private int port;
0 голосов
/ 21 января 2019

Я столкнулся с той же проблемой.Я сделал ошибку, указав имя схемы в базе данных mysql.

In spring.properties -> (spring boot application)
spring.datasource.url=jdbc:mysql://localhost:3306/db_microservice

Здесь вместо "db_microservice" я дал имя как "db-microservice".Так что не используйте «-».И это решило мою проблему.

0 голосов
/ 22 октября 2018

Ваше имя поля сущности из было сопоставлено с зарезервированным словом базы данных из, измените имя поля на другое или добавьте аннотацию @Column для этого поля.Как:

...

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

...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...