Extract DDL in Spring Boot + Spring Data JPA

Spring Boot + Spring Data JPA 사용 시 Entity 의 DDL를 추출하고 싶을 때 아래와 같이 하였다.

import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration;
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

import javax.persistence.spi.PersistenceUnitInfo;
import java.util.Properties;

public class JPASchemaExtractor  {

    @Autowired
    private LocalContainerEntityManagerFactoryBean lcemfb;

    public void extract_table_schema() throws Exception {

        final Properties prop = new Properties();
        prop.put(AvailableSettings.DIALECT, "org.hibernate.dialect.MySQL5InnoDBDialect");

        final PersistenceUnitInfo info = lcemfb.getPersistenceUnitInfo();
        final PersistenceUnitInfoDescriptor puid = new PersistenceUnitInfoDescriptor(info);
        final EntityManagerFactoryBuilderImpl emfbi = new EntityManagerFactoryBuilderImpl(puid, prop);

        final ServiceRegistry serviceRegistry = emfbi.buildServiceRegistry();
        final Configuration configuration = emfbi.buildHibernateConfiguration(serviceRegistry);

        final SchemaExport schemaExport = new SchemaExport(serviceRegistry, configuration);
        schemaExport.setDelimiter(";");

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

기본적으로는 Consol 에 DDL 이 남겨지고, schemaExport 에 output 파일을 지정하면 파일로 저장할 수 있다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중