EclipseLink не видит созданные таблицы в базе данных H2 - PullRequest
0 голосов
/ 13 февраля 2019

Для тестового запуска приложения я использую базу данных H2 1.4.197.Приложение развернуто на TomEE 7.1.0, который использует EclipseLink 2.6.4.

. В журналах я вижу, что во время запуска EclipseLink создает таблицы, последовательности и т. Д. Даже инициализирует последовательность со значением 0:

[EL Fine]: 2019-02-13 20: 25: 37.442 - ServerSession (1981996085) - Соединение (1317890500) - Поток (Thread [http-nio-8080-exec-4,5, main]) - СОЗДАТЬ ТАБЛИЦУ ПОЛЬЗОВАТЕЛЯ (ИД BIGINT NOT NULL, ИМЯ ПЕРВОГО ИМЕНИ, ИМЯ ФАБРИКИ ИМЕНИ, КЛЮЧ ПЕРВИЧНОГО (ID)) [EL Fine]: 2019-02-13 20: 25: 37.467 - Сеанс сервера (1981996085) - Соединение (1320052060)) - Thread (Thread [http-nio-8080-exec-4,5, main]) - СОЗДАТЬ АДРЕС ТАБЛИЦЫ (ID BIGINT NOT NULL, CITY VARCHAR, HOUSENO VARCHAR, STREET VARCHAR, ПЕРВИЧНЫЙ КЛЮЧ (ID)) [ELFine]: 2019-02-13 20: 25: 37.474 - ServerSession (1981996085) - Соединение (1328271122) - Поток (Thread [http-nio-8080-exec-4,5, main]) - CREATE TABLESEQUENCE (SEQ_NAME VARCHAR (50) NOT NULL, SEQ_COUNT NUMERIC (38), PRIMARY KEY (SEQ_NAME)) [EL Fine]: 2019-02-13 20: 25: 37.489 - Сеанс сервера (1981996085) - Соединение (432174967) --Поток (Поток [http-nio-8080-exec-4,5, основной]) - ВЫБРАТЬ * ИЗ ПОСЛЕДОВАТЕЛЬНОСТИ ГДЕ SEQ_NAME = 'SEQ_GEN' [EL Fine]: 2019-02-13 20: 25: 37.51 - ServerSession (1981996085) - Соединение (1127939384) - Поток (Поток [http-nio-8080-exec-4,5, main]) - INSERT INTO SEQUENCE (SEQ_NAME, SEQ_COUNT) значения ('SEQ_GEN', 0)

Мне также удалось подключиться через консоль H2 (я запустил WebServer вручную внутри приложения) и посмотреть там таблицы / последовательности.

Когда я делаю простой выбор через JPQL, все работает нормально:

Collection<User> getUsers() {
    Query query = entityManager.createQuery("select u from User u");
    return query.getResultList();
}

Однако, когда я пытаюсь вставить новую строку с помощью метода persist:

void saveUser(User user) {
    entityManager.persist(user);
}

, я получаю исключение, что таблицы не существуют:

Исключение [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException Внутреннее исключение: org.h2.jdbc.JdbcSQLException: Tabela "SEQUENCE" nie istnie TableПОСЛЕДОВАТЕЛЬНОСТЬ "не найдено;Оператор SQL: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT +?ГДЕ SEQ_NAME =?[42102-197] Код ошибки: 42102 Вызов: ОБНОВИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ УСТАН. SEQ_COUNT = SEQ_COUNT +?ГДЕ SEQ_NAME =?bind => [50, SEQ_GEN] Запрос: DataModifyQuery (name = "SEQUENCE" sql = "ОБНОВЛЕНИЕ SEQUENCE SET SEQ_COUNT = SEQ_COUNT +? WHERE SEQ_NAME =?")

РЕДАКТИРОВАТЬ:

Реализация сущности пользователя:

@Entity
public class User {
    private Long id;
    private String firstName;
    private String lastName;
    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    @Column
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    @Column
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

1 Ответ

0 голосов
/ 14 февраля 2019

Вероятно, проблема в вашем определении соединения H2.Если вы используете версию памяти с неверными параметрами, H2 автоматически откажется от ваших таблиц.

Предполагая, что у вас будет конфигурация таким образом:

jdbc:h2:mem:test

Измените ее на

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

Хранить базу данных H2 в памяти между соединениями

В будущем избегайте использования имен, таких как USER, для имен таблиц.Это зарезервированное слово для большинства поставщиков.Это не вызовет никаких проблем для H2, потому что это приемлемое имя для этого провайдера, но оно не будет совместимо с другими базами данных.

Ключевые слова / зарезервированные слова

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