当前位置:  开发笔记 > 编程语言 > 正文

使用自定义分隔符生成具有弹簧引导的DDL

如何解决《使用自定义分隔符生成具有弹簧引导的DDL》经验,为你挑选了0个好方法。

我想使用带有JPA - Hibernate 5.0.11的spring boot v1.4.3生成create和drop ddl脚本.

我找到的大多数答案都使用了javax.persistence.schema-generation属性.例如/sf/ask/17360801/

这种方法的问题是它输出没有分隔符的sql语句.例如

create table ... (...)
create table ... (...)

我希望它用分隔符输出语句 ;

create table ... (...);
create table ... (...);

但我找不到任何javax.persistence.schema-generation属性来配置它.

所以我想使用SchemaExportfrom hibernate,因为你可以设置delimiter属性.但要创建一个SchemaExport我需要一个MetadataImplementor(非删除的api).

我无法弄清楚如何MetadataImplementor从春季靴子中获得一个.

有没有人知道是否有

javax.persistence.schema-generation用于定义分隔符的属性

或者如何创建SchemaExport(获取依赖项)

还是有其他解决方案?


这是您可以使用的一些代码

@SpringBootApplication
@ComponentScan(basePackageClasses = Application.class)
@EntityScan(basePackageClasses = User.class)
public class Application {

    @Bean
    public ApplicationRunner getApplicationRunner() {
        return new ApplicationRunner() {

            public void run(ApplicationArguments args) throws Exception {
                // MetadataImplementor metadataImplementor = ???;
                // new SchemaExport(metadataImplementor);
            }
        };
    }

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.run(args);
    }

}

实体类

@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

另一个实体类

@Entity
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

application.properties

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=create.sql

maven依赖


    1.4.3.RELEASE



    
        
            
            org.springframework.boot
            spring-boot-dependencies
            ${spring.boot.version}
            pom
            import
        
    



    
        org.springframework.boot
        spring-boot-starter-data-jpa
    
    
        com.h2database
        h2
    
   

使用Hibernate 5.0

我刚刚用hibernate尝试了上面的代码5.0.11.Final.你唯一必须改变的是

SchemaExport schemaExport = new SchemaExport((MetadataImplementor) metadata);
schemaExport.setDelimiter(";");
schemaExport.setFormat(false);
schemaExport.setOutputFile(dropAndCreateDdlFile.getAbsolutePath());

schemaExport.execute(true, false, false, false);

或者当然让java配置返回MetadataImplementor而不是Metadata更改ApplicationRunner构造函数参数.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有