Hibernate 5. Generate SQL DDL into file

前端 未结 4 2137
执念已碎
执念已碎 2021-02-06 10:07

I tried using this class:

Hibernate/JPA: Check generated sql before updating DB Schema (like .NET EF migrations)

I have the following code:

pack         


        
4条回答
  •  一个人的身影
    2021-02-06 10:44

    I wrote a class for generating sql script depends on packages with entites.

    Used version of hibernate is '5.3.7.Final'

    public final class HibernateExporter {
    
        private static final Logger LOG = LoggerFactory.getLogger(HibernateExporter.class);
        private static final String OUTPUT_FILE = "schema.sql";
        private static final String DIALECT = "org.hibernate.dialect.H2Dialect";
    
        private List entityPackages;
    
        private HibernateExporter(List entityPackages) {
            this.entityPackages = entityPackages;
        }
    
        public static void main(String[] args) {
            final List entityPackages = Collections.singletonList("pakage.with.entites");
    
            HibernateExporter exporter = new HibernateExporter(entityPackages);
            exporter.export();
        }
    
        private void export() {
            SchemaExport export = new SchemaExport();
            export.setOutputFile(OUTPUT_FILE);
            export.setFormat(true);
            export.setDelimiter(";");
            EnumSet types = EnumSet.of(TargetType.SCRIPT);
            Metadata metadata = createMetadataSources().buildMetadata();
            export.execute(types, Action.CREATE, metadata);
        }
    
        private MetadataSources createMetadataSources() {
            MetadataSources metadata = new MetadataSources(
                    new StandardServiceRegistryBuilder()
                            .applySetting("hibernate.dialect", DIALECT)
                            .build());
    
            for (String entityPackage : entityPackages) {
                final Reflections reflections = new Reflections(entityPackage);
                for (Class cl : reflections.getTypesAnnotatedWith(MappedSuperclass.class)) {
                    metadata.addAnnotatedClass(cl);
                    LOG.info(String.format("Mapped = %s", cl.getName()));
                }
                for (Class cl : reflections.getTypesAnnotatedWith(Entity.class)) {
                    metadata.addAnnotatedClass(cl);
                    LOG.info(String.format("Mapped = %s", cl.getName()));
                }
            }
            return metadata;
        }
    }
    

提交回复
热议问题