Последовательность в H2 DB не найдена - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь выполнить тестирование Junit в Spring Boot 2.1.4 с использованием встроенной базы данных H2.Я сталкиваюсь со специфической проблемой с последовательностью.Итак, в соответствии с руководством по начальной загрузке и h2, у меня есть скрипт schema.sql для генерации моих соответствующих таблиц:

create sequence seq_test increment by 50;

Я вижу, что последовательность создания вызывается из журналов отладки.

Чтобы проверить, работает ли последовательность, я запустил nextval (), но получил таблицу seq_test, не созданную ошибку.Это происходит только для последовательности, когда я запросил нормальную таблицу, я получил правильный результат.

Контрольный пример:

@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest
@Import({EmbeddedRedis.class, EmbeddedRabbitMQ.class})
@Slf4j
public class ProfileCreationTests {

    @Autowired
    private EntityManager em;

    @Test
    public void profileCreationTest() {
        Query query = em
                .createNativeQuery("SELECT NEXTVAL(seq_test)");
        log.info(query.getSingleResult().toString());
        log.info(em.createNativeQuery("SELECT count(*) FROM tbl_test").getSingleResult().toString());
    }


}

Ошибка первой строки, если я закомментировал ее, второй запросработает нормально.

конфигурация приложения: весна: профили: тест h2: консоль: включено: true jpa: hibernate: use-new-id-generator-mappings: true

1 Ответ

0 голосов
/ 23 апреля 2019

Попробуйте Query query = em.createNativeQuery("call next value for seq_test");

h2 предлагает различные режимы совместимости , и синтаксис для получения следующего значения различается между ними.Я думаю, что приведенный выше синтаксис в порядке, если не выбран режим совместимости.

...