找不到H2 DB中的序列

时间:2019-04-23 02:37:35

标签: java spring spring-boot h2

我正在尝试使用H2嵌入式数据库在Spring Boot 2.1.4中进行junit测试。我面临着序列的一个特殊问题。因此,根据spring boot和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:         休眠:           use-new-id-generator-mappings:true

1 个答案:

答案 0 :(得分:0)

尝试Query query = em.createNativeQuery("call next value for seq_test");

h2提供了不同的compatibility modes,并且它们之间获取下一个值的语法也有所不同。我认为当未选择兼容模式时,上述语法会很好。