如何在Spring Boot 2启动时运行自定义ddl脚本

时间:2019-05-20 18:15:03

标签: java spring hibernate spring-boot jpa

是否可以在

之后的启动时运行自定义ddl脚本
  

spring.jpa.hibernate.ddl-auto =创建

已经在数据库中创建了模型实体?

当前,我对模型做了很多更改,并希望在更改后删除所有内容,并通过以下方式创建测试数据:

@Bean
InitializingBean createTestEntries() {
    return () -> {

        testObject t1 = new testObject (values...);
        testRepo.save(t1);
}

此后,我想创建一个数据库视图,但是我找不到使用Spring Boot 2 + Hibernate / JPA做到这一点的方法

我当然可以禁用ddl-auto并使用schema.sql和data.sql文件执行所有操作-但很高兴将我的模型更改自动填充到数据库中。

所以我想要一个混合模式。我的模型仍会自动填充-但是我以后可以调用自定义ddl代码来创建视图。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以将Springs JdbcTemplate注入到createTestEntries()方法中,并使用它执行自定义SQL创建视图:

@Bean
InitializingBean createTestEntries(@Autwired JdbcTemplate jdbc) {
return () -> {

    testObject t1 = new testObject (values...);
    testRepo.save(t1);

    jdbc.update("custom SQL here")
}

根据您的需要,您也可以注入DataSource或EntityManager(使用本机查询)并使用它。

编辑:本机查询示例

@Bean
InitializingBean createTestEntries(@Autowired EntityManager em) {
   return () -> {
     Query q = em.createNativeQuery("custom sql");
     q.executeUpdate()
   }
}

有关更多详细信息,请参见JPA API Docs