Hibernate добавляет нежелательный столбец в таблицу, которая не отображается или не определена

Я настроил Spring-Boot для использования Hibernate для загрузки данных из встроенной базы данных H2. Схема в этой базе данных будет автоматически сгенерирована скриптом schema.sql, а затем будет заполнена данными из файла data.sql.

Содержание моего schema.sql:

CREATE TABLE BusinessModel (
ID INTEGER PRIMARY KEY,
NAME VARCHAR(256) NOT NULL,
DESCRIPTION VARCHAR(1024),
IMAGEURL VARCHAR(128)
);

Проблема в том, что hibernate автоматически добавляет в таблицу дополнительный столбец, который не определен в файле schema.sql. В журнале приложения я могу найти эту строку:

Hibernate: alter table APP.PUBLIC.BUSINESSMODEL add column image_url varchar(255)

Таким образом, столбец image_url добавляется автоматически. В H2-Console я вижу таблицу и ее содержимое. Там все столбцы из schema.sql добавлены и заполнены правильными данными. Кроме того, столбец image_url добавляется и остается пустым. Внутри моей сущности столбец imageurl отображается следующим образом:

@Column(name = "imageurl")
public String getImageUrl() {
    return imageUrl;
}

Теперь моя проблема в том, что Hibernate ссылается и загружает данные из image_url, что неверно. До сих пор я не мог найти ни одного файла, в котором определено image_url. Есть ли какой-то тип кеша, который нужно очистить? Я перезапустил приложение несколько раз, удалил таблицу и изменил spring.jpa.hibernate.ddl-auto с none на create-drop обратно на none.

ОБНОВЛЕНИЕ 1 Полный класс BusinessModel:

@Entity

@Table(имя = "бизнес-модель") открытый класс BusinessModel реализует Serializable {

private static final long serialVersionUID = -3152463846487623463L;

@Id
private int id;

private String name, description, imageUrl;

public BusinessModel() {

}

@Column(name = "id", unique = true, nullable = false)
public int getID() {
    return id;
}

public void setID(int id) {
    this.id = id;
}

@Column(name = "name")
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Column(name = "description")
public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

@Column(name = "imageurl")
public String getImageUrl() {
    return imageUrl;
}

public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
}

}

Я использую Spring-Boot 2.1.2.REALESE и, следовательно, интегрированную версию Hibernate. Кажется, Hibernate версии 5.3

ОБНОВЛЕНИЕ 2 приложение.свойства

# Hibernate
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect
spring.jpa.show_sql=true
spring.datasource.initialize=true
spring.jpa.generate-ddl=true

# Database
spring.datasource.url=jdbc:h2:mem:app;create=true

# Enabling H2 Console
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

Вероятно, это связано со стратегиями именования Hibernate... baeldung.com/hibernate-наименование-стратегия

BretC 27.02.2019 14:24
@Column должен преобладать над любой стратегией именования. Также spring.jpa.hibernate.ddl-auto было установлено на none. Таким образом, спящий режим не должен выполнять никаких DDL.
XtremeBaumer 27.02.2019 14:28

Можете ли вы добавить весь класс BusinessModel и конфигурацию базы данных?

Tijkijiki 27.02.2019 14:33

Какую версию Hibernate вы используете? Мне пахнет жуком.

Paulo Pedroso 27.02.2019 14:35

Это задокументировано. docs.spring.io/spring-boot/docs/current/reference/html/…

JB Nizet 27.02.2019 14:54

@JB Nizet - spring.jpa.hibernate.ddl-auto установлен на none - так что это не так.

Vüsal 27.02.2019 14:56

Вы пробовали установить spring.jpa.generate-ddl=false? Пожалуйста, добавьте application.properties

Tijkijiki 27.02.2019 15:21

Использование @Tijkijiki false приведет к ошибке в EntityManger. Я обновил свой пост с application.properties

Christoph 27.02.2019 16:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
417
0

Другие вопросы по теме