Skip to content

Commit

Permalink
Added Schema Generator Util Class (#37)
Browse files Browse the repository at this point in the history
* updated models to fix the build issue

* adjusted ProjectUser

* Added generate schema util class

* Added generate schema util class

* updated comment annotation in StudioAsset class
  • Loading branch information
picksitquick committed Aug 22, 2023
1 parent ac3858c commit 4dcacf7
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 2 deletions.
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,12 @@
<artifactId>spring-context</artifactId>
<version>6.0.9</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.9.Final</version>
<scope>compile</scope>
</dependency>


</dependencies>
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/com/gamedoora/model/GenerateSchemaApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.gamedoora.model;

import com.gamedoora.model.util.HibernateUtil;

public class GenerateSchemaApplication {

public static void main(String[] args) throws ClassNotFoundException {
// Call the generateSchema() method after the application starts
HibernateUtil hibernateUtil = new HibernateUtil();
hibernateUtil.generateSchema();
System.out.println("Schema generation completed.");

}
}
2 changes: 1 addition & 1 deletion src/main/java/com/gamedoora/model/dao/ProjectUser.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,5 @@ public class ProjectUser implements Serializable {
// @ManyToOne
// @JoinColumn(name = "project_id")
// Projects projects;

// testing
}
4 changes: 3 additions & 1 deletion src/main/java/com/gamedoora/model/dao/StudioAsset.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.Comment;

import javax.persistence.Column;
import javax.persistence.Entity;
Expand Down Expand Up @@ -93,7 +94,8 @@ public class StudioAsset extends Audit implements Serializable {
@Column(name = "script_locked_at")
private Date scriptLockedAt;

@Column(name = "asset_type" , columnDefinition = "VARCHAR(255) COMMENT 'document or image or audio or video.'")
@Column(name = "asset_type" , columnDefinition = "VARCHAR(255)")
@Comment(value = "document or image or audio or video.")
private String assetType;

/* ColumnDefinition syntax has been updated, using nullable=false doesn't seem to work consistently.*/
Expand Down
70 changes: 70 additions & 0 deletions src/main/java/com/gamedoora/model/util/HibernateUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.gamedoora.model.util;

import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AnnotationTypeFilter;

import javax.persistence.Entity;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;

public class HibernateUtil {

private String outputDir = "Your local gamedoora-data directory";

private int schemaVersion = 3; // remove 3 and add the next version number which you want

/**
* Generates database create commands for the specified entities using Hibernate native API, SchemaExport.
* Creation commands are exported into the create.sql file.
*/
public void generateSchema() throws ClassNotFoundException {
Map<String, String> settings = new HashMap<>();
settings.put("connection.driver_class", "Driver_name");
settings.put("dialect", "DB_Dialect");
settings.put("hibernate.connection.url", "DB_URL");
settings.put("hibernate.connection.username", "USERNAME");
settings.put("hibernate.connection.password", "PASSWORD");
settings.put("hibernate.hbm2ddl.auto", "create");
settings.put("show_sql", "true");

StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(settings).build();

MetadataSources metadataSources = new MetadataSources(serviceRegistry);

//adding all models within metadata sources manually
//metadataSources.addAnnotatedClass(Users.class);
//metadataSources.addAnnotatedClass();

// adding all models within metadata sources using ClassPath Scanner.
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(Entity.class));

for (BeanDefinition beanDefinition : scanner.findCandidateComponents("com.gamedoora.model.dao")) {
Class<?> annotatedClass = Class.forName(beanDefinition.getBeanClassName());
metadataSources.addAnnotatedClass(annotatedClass);
}

Metadata metadata = metadataSources.buildMetadata();

SchemaExport schemaExport = new SchemaExport();
schemaExport.setHaltOnError(true);
schemaExport.setFormat(true);

// Specify the custom output directory and generate schema script with a new version number
String outputDirectory = outputDir; // Replace with the desired directory path
String scriptFileName = "gamedoora-beta-v" + schemaVersion + ".sql";

schemaExport.setOutputFile(outputDirectory + "/" + scriptFileName);
schemaExport.createOnly(EnumSet.of(TargetType.SCRIPT), metadata);

schemaVersion++; // Increment the version number
}
}

0 comments on commit 4dcacf7

Please sign in to comment.