Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA2.1/Hibernate 5.2使用Hibernate工具通过ANT Maven任务生成ddl_Java_Hibernate_Maven_Jpa_Persistence.xml - Fatal编程技术网

Java JPA2.1/Hibernate 5.2使用Hibernate工具通过ANT Maven任务生成ddl

Java JPA2.1/Hibernate 5.2使用Hibernate工具通过ANT Maven任务生成ddl,java,hibernate,maven,jpa,persistence.xml,Java,Hibernate,Maven,Jpa,Persistence.xml,我已经从Hibernate 4.3更新到最新版本,目前是5.2.10.Final <groupId>org.codehaus.mojo</groupId> <artifactId>hibernate3-maven-plugin</artifactId> <version>2.2</version> 我需要maven生成ddl模式,这样当我运行drop数据库然后创建模式时,它将获取生成的schmea,我正试图在maven中运

我已经从Hibernate 4.3更新到最新版本,目前是5.2.10.Final

<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
我需要maven生成ddl模式,这样当我运行drop数据库然后创建模式时,它将获取生成的schmea,我正试图在maven中运行ant任务。在我以前的版本中,我使用

<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
org.codehaus.mojo
因此,在我的pom.xml中,我现在有以下内容

<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <id>generate-ddl-create</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <target name="schemaexport" depends="build-demo" description="Exports a generated schema to DB and file">
                              <taskdef
                                name="hibernatetool"
                                classname="org.hibernate.tool.ant.HibernateToolTask"
                                classpathref="maven.dependency.classpath"                                   
                              />
                              <hibernatetool destdir=".">
                                <classpath>             
                                  <path location="src/main/java"/>
                                </classpath>
                                <jpaconfiguration persistenceunit="randb_MariaDb" />
                                <hbm2ddl console="false" export="false" update="false" drop="false" create="true" outputfilename="/schema_MariaDb.sql" format="true" haltonerror="true"/>
                              </hibernatetool>
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>            
                </execution>
            </executions>
        </plugin>  

maven antrun插件
1.7
生成ddl创建
生成源
跑
我的persistence.xml看起来像这样

<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<persistence-unit name="randb_MariaDb" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <!-- Comment this our if you want to use properties below -->
    <non-jta-data-source>java:/comp/env/jdbc/randb_MariaDb</non-jta-data-source>
    <properties>
        <!-- 
        <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/ran" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="r00tPwd" />
        <property name="hibernate.connection.shutdown" value="true" />
        <property name="hibernate.connection.pool_size" value="0"/>
        <property name="hibernate.connection.aggressive_release" value="true"/>
         -->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.jdbc.batch_size" value="20"/>
    </properties>
</persistence-unit>

org.hibernate.jpa.HibernatePersistenceProvider
java:/comp/env/jdbc/randb\u MariaDb
我的问题是,当我运行mvn antrun时:run@generate-ddl create我得到以下异常

<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-       plugin:1.7:run (generate-ddl-create) on project WimacRanServer: An Ant BuildException has occured: org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [java:/comp/env/jdbc/randb_MariaDb]
[ERROR] around Ant part ...<hibernatetool destdir=".">... @ 5:30 in /Users/dave/gitRepository/WimacRanServer/target/antrun/build-main.xml: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (generate-ddl-create) on project WimacRanServer: An Ant BuildException has occured: org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [java:/comp/env/jdbc/randb_MariaDb]
around Ant part ...<hibernatetool destdir=".">... @ 5:30 in /Users/dave/gitRepository/WimacRanServer/target/antrun/build-main.xml
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR]未能在项目WimacRanServer上执行目标org.apache.maven.plugins:maven antrun-plugin:1.7:run(generate ddl create):发生Ant BuildException:org.hibernate.engine.jndi.jndie异常:解析jndi名称时出错[java:/comp/env/jdbc/randbu MariaDb]
[错误]蚂蚁部分周围……@5:30 in/Users/dave/gitRepository/WimacRanServer/target/antrun/build-main.xml:需要在环境或系统属性中指定类名,或作为小程序参数,或在应用程序资源文件中指定类名:java.naming.factory.initial
[错误]->[帮助1]
org.apache.maven.lifecycle.LifecycleExecutionException:未能执行目标org.apache.maven.plugins:maven antrun插件:1.7:在项目WimacRanServer上运行(生成ddl创建):发生Ant构建异常:org.hibernate.engine.jndi.jndieException:解析jndi名称时出错[java:/comp/env/jdbc/randbc]
围绕蚂蚁部分5:30 in/Users/dave/gitRepository/WimacRanServer/target/antrun/build-main.xml
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
位于org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
位于org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
位于org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
位于org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
位于org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
位于org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.codehaus.plexus.classworlds.launcher.launcher.launchEnhanced(launcher.java:289)
位于org.codehaus.plexus.classworlds.launcher.launcher.launch(launcher.java:229)
位于org.codehaus.plexus.classworlds.launcher.launcher.mainWithExitCode(launcher.java:415)
我猜这可能与非jta数据源有关,并尝试了一些方法,如删除该数据源和取消对其余属性的注释,但没有效果。如果有人遇到过类似的问题,或者能够提供一些信息,那么他们会非常满意。

试试看,这个工具支持最新的hibernate版本

<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
示例用法:

<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<plugin>
    <groupId>com.devskiller.jpa2ddl</groupId>
    <artifactId>jpa2ddl-maven-plugin</artifactId>
    <version>0.9.5</version>
    <configuration>
        <packages>
            <package>com.test.model</package>
        </packages>
        <outputPath>${project.build.directory}/schema_MariaDb.sql</outputPath>
        <jpaProperties>
            <property>
                <name>hibernate.dialect</name>
                <value>org.hibernate.dialect.MySQL5InnoDBDialect</value>
            </property>
        </jpaProperties>
    </configuration>
</plugin>

com.devskiller.jpa2ddl
jpa2ddl maven插件
0.9.5
com.test.model
${project.build.directory}/schema\u MariaDb.sql
冬眠方言
org.hibernate.dialogue.mysql5innodbdialogue

并使用命令调用:
mvn jpa2ddl:generate

使用hibernate 5,您不需要persistence.xml。我在文档中读到,您不必提供persistence.xml,但据我所知,您仍然可以。上面失败的例子在升级hibernate之前使用mvn hibernate3:hbm2ddl工作过,我试图回到一个点,在mavn构建中使用类似的命令生成模式。我自己从未使用过ANT,但我知道的是,如果指定的数据库不存在,hibernate将在其中生成一个表。对于hibernate4程序,我有一个persistence.xml和一个application.xml for spring,我在其中定义了数据库连接。这个工具:这个插件支持Hibernate 5.2+和more@DavidRowntree看起来您必须实现SchemaFilter,并通过设置为限定类名。样本提供商在这里:再次感谢您的快速回复,我一直在做其他事情。。。我看过github项目,注意到添加了一个序列跳过。我尝试过使用它,但它仍然会生成类似于so
createtableuserseq(nex)的序列
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>