столбец «limit» в Hibernate JPA H2 проблема - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть небольшая служба SpringBoot JPA REST.

Я использую H2 для среды разработки.

Я использую ddl-auto: update

Использование SINGLE табличная стратегия для иерархических сущностей.

Имитация действительного кода похожа на приведенную ниже

@Data
@Entity
@NoArgsConstructor
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE")
public abstract class SuperEntity {

    @Id
    @GeneratedValue
    Long id;

    private String      property1;
    private String      property2;
    .............
    ...............

    @ManyToOne
    private SomeOtherEntity b;
}

Есть много дочерних сущностей, но одна из сущностей похожа на эту

@Data
@NoArgsConstructor
@Entity
@DiscriminatorValue("child1")
public class Child1 extends SuperEntity {

    @Enumerated(EnumType.STRING)
    private CType cType;

    private BigDecimal     limit;
    private BigDecimal     x;
    private BigDecimal     y;
    private int            z;
    .............
    ...............  
}

Но при запуске приложения во время выполнения DDL я получаю следующее исключение.

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement 
 CREATE TABLE SUPER_ENTITY (
            .............
            ...............

            LIMIT[*] DECIMAL(19,2),
            .............
            ...............

        ) "; expected "identifier"; SQL statement:

Я упомянул только столбец LIMIT , потому что именно здесь * упоминается при ошибке H2 журнал . если я просто изменил имя поля в классе Child1 с limit на creditLimit, все работает нормально.

в чем проблема с ограничением имени столбца?

1 Ответ

1 голос
/ 04 февраля 2020

Как отметил Алан Хей, «limit» - зарезервированное ключевое слово. Таким образом, вам нужно избежать этого как:

@Column(name = "`limit`")

Есть еще несколько методов. См https://vladmihalcea.com/escape-sql-reserved-keywords-jpa-hibernate/

...