spring - 如何使用 spring 数据和基于 java 的配置创建 ddl 文件?

标签 spring hibernate jpa

我已经启动并运行了我的 spring 数据 JPA 配置。我想从我的注释实体中获取一个 ddl sql 文件

我知道这个问题已经被问过很多次了。但是我找不到有用的解释如何使用基于 java 的 spring 配置来做到这一点。

这是我的 JPA 设置:

@Bean(name = BEAN_ENTITY_MANAGER_FACTORY)
public EntityManagerFactory entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em = createLocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setJpaVendorAdapter(jpaVendorAdapter());
    em.setPersistenceUnitName(getPersistenceUnitName());
    em.setPackagesToScan(getPackagesToScan());
    processOptionalProperty(Environment.HBM2DDL_AUTO, em);
    processOptionalProperty(HIBERNATE_JDBC_BATCH_SIZE, em);
    processOptionalProperty(EHCACHE_CONFIGURATIONRESOURCENAME_PROPERTY, em);
    em.afterPropertiesSet();
    return em.getObject();
}

@Bean(name = BEAN_HIBERNATE_JPA_VENDOR_ADAPTER)
public HibernateJpaVendorAdapter jpaVendorAdapter() {
    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
    adapter.setShowSql(Boolean.parseBoolean(getPropertyValue(HIBERNATE_SHOW_SQL_PROPERTY)));
    adapter.setDatabasePlatform(getPropertyValue(HIBERNATE_DATABASE_PLATFORM_PROPERTY));
    adapter.setGenerateDdl(true);
    return adapter;
}

hbm2ddl 是这样设置的:

hibernate.hbm2ddl.auto=create

此配置会在应用程序启动时创建必要的数据库表。我怎样才能得到一个包含所有 ddl 命令的 sql 脚本来设置数据库?

最佳答案

经过大量谷歌搜索和尝试错误后,这是我找到的解决方案。

要生成 ddl 脚本,您需要 maven hibernate3:hbm2ddl plugin .为了获得插件,我将其添加到我的 pom.xml:

        <plugin>
            <!-- run "mvn hibernate3:hbm2ddl" to generate a schema -->
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>hibernate3-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <components>
                    <component>
                        <name>hbm2ddl</name>
                        <implementation>jpaconfiguration</implementation>
                    </component>
                </components>
                <componentProperties>
                    <persistenceunit>eai</persistenceunit>
                    <outputfilename>ddl-file.sql</outputfilename>
                    <drop>false</drop>
                    <create>true</create>
                    <export>false</export>
                    <format>true</format>
                </componentProperties>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate.javax.persistence</groupId>
                    <artifactId>hibernate-jpa-2.0-api</artifactId>
                    <version>1.0.0.Final</version>
                </dependency>
            </dependencies>
        </plugin>

最难找到的是依赖部分。谢谢to this blog post指出这一点。

我遇到的第二件事是持久性单元名称。这是通过将名为 persistence.xml 的文件放入您的 META-INF 目录来配置的。

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
         http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

    <persistence-unit name="eai">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
            <!-- other properties ... -->
        </properties>
    </persistence-unit>
</persistence>

此文件还包含 hibernate 方言。这对于获得让您的数据库满意的 sql 很重​​要。

关于spring - 如何使用 spring 数据和基于 java 的配置创建 ddl 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795940/

相关文章:

postgresql - 在 postgres 和 Hibernate 中使用主键序列时出错

java - 使用 Hibernate 和 Spring 批量插入

java - 从服务中获取错误的输出

java - 如何将资源映射到枚举常量?

java - 使用 Infinispan 和 Wildfly 配置 Hibernate 搜索

java - 在没有巨大列表参数的情况下重写 Hibernate 查询

spring - Eclipse 间接引用的 .class 文件

hibernate - Grails 2.4 + Hibernate 4 + 可搜索插件 = ClassNotFoundException : org. hibernate.impl.SessionFactoryImpl

java - 当事务类型为 JTA 时显式启动和提交事务有什么影响?

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'entityManagerFactory' defined in ServletContext resource