我想使用带有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
属性来配置它.
所以我想使用SchemaExport
from 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; } }
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
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
构造函数参数.