hibernate - 生成sql脚本

标签 hibernate jpa

是否有任何 hibernate 实用程序可用于连接到数据库。列出所有表,并生成用于“创建表+数据”的sql脚本并另存为*.sql?

最佳答案

从数据库导出数据为 sql

使用 liquibase开源项目

LiquiBase is an open source (LGPL), database-independent library for tracking, managing and applying database changes. It is built on a simple premise: All database changes (structure and data) are stored in an XML-based descriptive manner and checked into source control.



为给定的 JPA 实体生成创建和删除脚本

我们使用此代码生成 drop 和 create 语句:
只需使用所有实体类构建此类并调用 create/dropTableScript。

如果需要,您可以改用 persitence.xml 和持久性单元名称。说些什么吧
我也发布了代码。

import java.util.Collection;
import java.util.Properties;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.dialect.Dialect;
import org.hibernate.ejb.Ejb3Configuration;

/**
 * SQL Creator for Tables according to JPA/Hibernate annotations.
 *
 * Use:
 *
 * {@link #createTablesScript()} To create the table creationg script
 *
 * {@link #dropTablesScript()} to create the table destruction script
 * 
 */
public class SqlTableCreator {

    private final AnnotationConfiguration hibernateConfiguration;
    private final Properties dialectProps;

    public SqlTableCreator(final Collection<Class<?>> entities) {

        final Ejb3Configuration ejb3Configuration = new Ejb3Configuration();
        for (final Class<?> entity : entities) {
            ejb3Configuration.addAnnotatedClass(entity);
        }

        dialectProps = new Properties();
        dialectProps.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");

        hibernateConfiguration = ejb3Configuration.getHibernateConfiguration();
    }

    /**
     * Create the SQL script to create all tables.
     * 
     * @return A {@link String} representing the SQL script.
     */
    public String createTablesScript() {
        final StringBuilder script = new StringBuilder();

        final String[] creationScript = hibernateConfiguration.generateSchemaCreationScript(Dialect
                .getDialect(dialectProps));
        for (final String string : creationScript) {
            script.append(string).append(";\n");
        }
        script.append("\ngo\n\n");

        return script.toString();
    }

    /**
     * Create the SQL script to drop all tables.
     * 
     * @return A {@link String} representing the SQL script.
     */
    public String dropTablesScript() {
        final StringBuilder script = new StringBuilder();

        final String[] creationScript = hibernateConfiguration.generateDropSchemaScript(Dialect
                .getDialect(dialectProps));
        for (final String string : creationScript) {
            script.append(string).append(";\n");
        }
        script.append("\ngo\n\n");

        return script.toString();
    }
}

关于hibernate - 生成sql脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1062058/

相关文章:

java - 一对多 order by 与案例 hibernate spring

java - query.setMaxResults() 导致 toplink 出现问题

java - org.springframework.beans.factory.annotation.InjectionMetadata.needsRefresh

java - 创建@OneToOne时抛出错误无法检索ResultSet

java - 如何在使用 JPA 和 Hibernate 获得 OptimisticLockException 时重试服务方法

java - 自动增加值并设置从 1 开始 hibernate

hibernate - 是否可以使用 JPA 从 javax.persistence.Query.getResultList() 流式传输结果?

java - JPA JoinColumn 与mappedBy

mysql - 我想在我的 Springboot 项目中实现外键,但出现以下错误

java - Hibernate - 访问一对多关联的子元素时出现 NullPointerException