Spring JPA DDL文件生成-如何在生成之前删除或清除文件

我正在使用此设置来生成ddl文件:

spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=./ddl/schema.sql

生成是通过Maven验证阶段中的特定测试执行的:

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
@TestPropertySource(locations = "/ddl.properties")
public class GenerateDDL {

    @Autowired
    private EntityManager em;

    @Test
    public void generateDDL() throws IOException {
        em.close();
        em.getEntityManagerFactory().close();
    }

}

这工作正常,出现问题:生成器不会创建新文件,而只会附加所有内容。

有没有一种方法或设置可以让Generator始终创建新文件或清理旧文件?

在测试中删除它会在生成后将其删除。我们还需要将文件发布到git上,这样它就不会在target中生成。

更新 在Hibernate中似乎至少没有解决方案(直到Hibernate 6): https://hibernate.atlassian.net/browse/HHH-11817

在创建持久性上下文之前,是否有办法挂接到Spring上下文创建中?在那里,我可以删除文件。

wanderer0 回答:Spring JPA DDL文件生成-如何在生成之前删除或清除文件

我也遇到了同样的问题,在模式生成之前找到了以下清理方法:使用 BeanFactoryPostProcessor。 BeanFactoryPostProcessor 在加载所有 bean 定义时调用,但尚未实例化 bean。

 /**
 * Remove auto-generated schema files before JPA generates them.
 * Otherwise new content will be appended to the files.
 */
@Configuration
public class SchemaSupport {

    @Bean
    public static BeanFactoryPostProcessor schemaFilesCleanupPostProcessor() {
        return bf -> {
            try {
                Files.deleteIfExists(Path.of("schema-drop-auto.sql"));
                Files.deleteIfExists(Path.of("schema-create-auto.sql"));
            } catch (IOException e) {
                throw new IllegalStateException(e);
            }
        };
    }
本文链接:https://www.f2er.com/3151958.html

大家都在问