当前位置: 首页 > 知识库问答 >
问题:

使用Hibernate4/JPA2.1在MAVEN build中生成DDL脚本

龚跃
2023-03-14
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>hibernate3-maven-plugin</artifactId>
                <version>3.0</version>
                <executions>
                    <execution>
                        <id>generate-sql-schema</id>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>hbm2ddl</goal>
                        </goals>
                        <configuration>
                            <hibernatetool>
                                <jpaconfiguration persistenceunit="${persistenceUnitName}" />
                                <hbm2ddl update="true" create="true" export="false"
                                    outputfilename="src/main/sql/schema.sql" format="true"
                                    console="true" />
                            </hibernatetool>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

但我得到以下错误:

[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (generate-sql-schema) on project my-project: There was an error creating the AntRun task.
An Ant BuildException has occured: java.lang.NoClassDefFoundError: org/hibernate/util/ReflectHelper: org.hibernate.util.ReflectHelper -> [Help 1]

已迁移到新包的该类:org.hibernate.internal.util.ReflectHelper

然而,我没有找到在MAVEN Build中继续生成DDL创建脚本的明确方法。

那又怎样?它不是应该支持的一个主要特性吗?怎么做?

共有1个答案

酆恩
2023-03-14
<property name="javax.persistence.schema-generation.scripts.action" value="create"/>
<property name="javax.persistence.schema-generation.create-source" value="metadata"/>
<property name="javax.persistence.schema-generation.scripts.create-target" value="target/jpa/sql/create-schema.sql"/>
import java.io.IOException;
import java.util.Properties;

import javax.persistence.Persistence;

import org.hibernate.jpa.AvailableSettings;

public class JpaSchemaExport {

    public static void main(String[] args) throws IOException {
        execute(args[0], args[1]);
        System.exit(0);
    }

    public static void execute(String persistenceUnitName, String destination) {
        System.out.println("Generating DDL create script to : " + destination);

        final Properties persistenceProperties = new Properties();

        // XXX force persistence properties : remove database target
        persistenceProperties.setProperty(org.hibernate.cfg.AvailableSettings.HBM2DDL_AUTO, "");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_DATABASE_ACTION, "none");

        // XXX force persistence properties : define create script target from metadata to destination
        // persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_CREATE_SCHEMAS, "true");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_SCRIPTS_ACTION, "create");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_CREATE_SOURCE, "metadata");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_SCRIPTS_CREATE_TARGET, destination);

        Persistence.generateSchema(persistenceUnitName, persistenceProperties);
    }

}
<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <id>generate-ddl-create</id>
            <phase>process-classes</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <!-- ANT Task definition -->
                    <java classname="com.orange.tools.jpa.JpaSchemaExport"
                        fork="true" failonerror="true">
                        <arg value="${persistenceUnitName}" />
                        <arg value="target/jpa/sql/schema-create.sql" />
                        <!-- reference to the passed-in classpath reference -->
                        <classpath refid="maven.compile.classpath" />
                    </java>
                </target>
            </configuration>

        </execution>
    </executions>
</plugin>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-maven-plugin</artifactId>
    <version>4.3.1.Final</version>
</dependency>
 类似资料:
  • 问题内容: 如何使用SQL(选择/存储过程/等)从SQL Server数据库生成所有表的DDL(带有外键,索引等)脚本?我需要除数据外的所有内容。 我 无法 使用Sql Server Management Studio,因为我想在将在Linux上运行的node.js脚本中使用它! 问题答案: 对于表:(您可以按以下方式工作) 程序如下:

  • DB2 RazorSQL生成DDL是用于创建用于创建该表的SQL命令。在DB2 RazorSQL生成DDL,可参考以下操作: 生成结果如下:

  • 我正在测试JPA2。1和新的“模式生成”功能。为此,我在HyperSQL数据库下测试了两个实现: Eclipse Link 2.5.2-M1,它是参考实现。 Hibernate4.3 我对实现没有任何偏好(甚至对性能也没有偏好)。我测试了EclipseLink,因为它是第一个JPA2。1实现可用,但现在,Hibernate4.3在这里,JPA2也在这里。1合规。我唯一想要的是获得独立于JPA提供者

  • 在Tomcat web应用程序上运行的Maven-Spring-Hibernate-MySql中,我使用hibernate ddl生成带有mysql5InnodbDealication的DB模式。 除了外键的cascade选项外,模式的生成很好。例如,我有这样的结构: 保存用户详细信息对象的用户对象,两者共享相同的键: 下面是用户详细信息的模式创建: 正如您所看到的,在“外键”部分中没有写任何“o

  • null null 库版本: (使用gradle,而不是maven)

  • 问题内容: 我将Spring Boot与结合使用,但是当应用程序重新启动时,所有表都会删除并再次创建。有什么方法可以避免为现有表重新创建? 问题答案: 通常不应该在生产中使用hibernate.ddl- auto 。