I want to create ddl creation and removal scripts using spring boot v1.4.3 with JPA - Hibernate 5.0.11.
Most of the answers found use javax.persistence.schema-generation properties. For instance. stack overflow
The problem with this approach is that it outputs sql statements without a separator. For instance.
create table ... (...) create table ... (...)
I want it to output delimited operators ;
create table ... (...); create table ... (...);
But I can not find any javax.persistence.schema-generation property to configure it.
So, I was thinking of using SchemaExport from sleep mode because you can set the delimiter property . But to create a SchemaExport I need a MetadataImplementor (without an overridden api).
I can't figure out how to get the MetadataImplementor download from spring.
Does anyone know if there is
- a
javax.persistence.schema-generation property to define a delimiter - or how to create
SchemaExport (get dependencies) - or has another solution?
Here is the code you can play with
@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 dependencies <properties> <spring.boot.version>1.4.3.RELEASE</spring.boot.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies>
With Hibernate 5.0
I just tried the code above with hibernate 5.0.11.Final . The only thing you have to change:
SchemaExport schemaExport = new SchemaExport((MetadataImplementor) metadata); schemaExport.setDelimiter(";"); schemaExport.setFormat(false); schemaExport.setOutputFile(dropAndCreateDdlFile.getAbsolutePath()); schemaExport.execute(true, false, false, false);
or, of course, let the java configuration return MetadataImplementor instead of Metadata and change the constructor parameter of ApplicationRunner .