首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带蚂蚁的OpenJPA ReverseMappingTool

带蚂蚁的OpenJPA ReverseMappingTool
EN

Stack Overflow用户
提问于 2014-08-12 05:22:19
回答 1查看 1K关注 0票数 0

所以我希望这是个简单的问题。我下载了openjpa-all-2.3.0.jar (和mysql-连接器-java-5.1.31-bin.jar),所以,我把它作为我的build.xml

代码语言:javascript
复制
<?xml version="1.0" ?>
<project name="reverser" default="reversemap" basedir=".">
    <taskdef name="reversemappingtool" classname="org.apache.openjpa.jdbc.ant.ReverseMappingToolTask">
        <classpath>
                <pathelement location="${basedir}/mysql-connector-java-5.1.31-bin.jar" />
                <pathelement location="${basedir}/openjpa-all-2.3.0.jar" />
        </classpath>
    </taskdef>
    <target name="reversemap">
        <reversemappingtool package="com.whatever.dbresults" directory="${basedir}/src" customizerProperties="${basedir}/conf/reverse.properties" metadata="none" generateAnnotations="true" />
    </target>
</project>

在我的reverse.properties文件中,我有:

代码语言:javascript
复制
ConnectionDriverName=com.mysql.jdbc.Driver
ConnectionDriverURL=jdbc:mysql://localhost:3306/db
ConnectionUser=user
ConnectionPassword=pw

当我这么做的时候,我得到:

代码语言:javascript
复制
/tmp/apache-openjpa-2.3.0/build.xml:10: <openjpa-2.3.0-r422266:1540826 fatal user error> org.apache.openjpa.util.UserException: The persistence provider is attempting to use properties in the persistence.xml file to resolve the data source. A Java Database Connectivity (JDBC) driver or data source class name must be specified in the openjpa.ConnectionDriverName or javax.persistence.jdbc.driver property. The following properties are available in the configuration: "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@ec63420c". 
at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:72)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:849)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:732)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource(JDBCConfigurationImpl.java:878)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource2(JDBCConfigurationImpl.java:920)
at org.apache.openjpa.jdbc.schema.SchemaGenerator.<init>(SchemaGenerator.java:85)
at org.apache.openjpa.jdbc.meta.ReverseMappingTool.run(ReverseMappingTool.java:2009)
at org.apache.openjpa.jdbc.ant.ReverseMappingToolTask.executeOn(ReverseMappingToolTask.java:295)

这可能是调试此问题的错误方法,但跟踪了在ReverseMappingToolTask.java第282行加载的属性文件,然后将其传递给

代码语言:javascript
复制
flags.customizer.setConfiguration(customProps);

在打电话之前

代码语言:javascript
复制
ReverseMappingTool.run(conf, files, flags, loader);

这一错误似乎发生在ReverseMappingTool的第2009行,它似乎从未触及过“旗帜”。

井。我的“调试”可能是一个无后遗症/红鲱鱼/什么你有。如何使反向映射尽可能以最简单的方式工作?我只想和蚂蚁一起用,而不是maven,等等。

编辑2014-08-13 OK,通过将build.xml更改为

代码语言:javascript
复制
<?xml version="1.0" ?>
<project name="reverser" default="reversemap" basedir=".">
    <taskdef name="reversemappingtool" classname="org.apache.openjpa.jdbc.ant.ReverseMappingToolTask">
        <classpath>
            <pathelement location="${basedir}/mysql-connector-java-5.1.31-bin.jar" />
            <pathelement location="${basedir}/openjpa-all-2.3.0.jar" />
        </classpath>
    </taskdef>
    <target name="reversemap">
        <reversemappingtool package="com.whatever.dbresults" directory="${basedir}/src" metadata="none" generateAnnotations="true">
            <config 
                connectionDriverName="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/db"
                connectionUserName="user"
                connectionPassword="pw"
            />
        </reversemappingtool>
    </target>
</project>

但是,现在,我明白:

代码语言:javascript
复制
<openjpa-2.3.0-r422266:1540826 fatal user error> org.apache.openjpa.util.MetaDataException: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance() returned null). This might mean that no configuration properties were found. Ensure that you have a META-INF/persistence.xml file, that it is available in your classpath, or that the properties file you are using for configuration is available. If you are using Ant, please see the <properties> or <propertiesFile> attributes of the task's nested <config> element. This can also occur if your OpenJPA distribution jars are corrupt, or if your security policy is overly strict.

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-14 03:54:49

好吧,好吧,我终于让它起作用了。当然,我不知道这是不是“正确”的方式。但是,它生成了我的类,这就是我真正想要的。

因此,我的新构建文件如下所示:

代码语言:javascript
复制
<?xml version="1.0" ?>
<project name="reverser" default="reversemap" basedir=".">
    <taskdef name="reversemappingtool" classname="org.apache.openjpa.jdbc.ant.ReverseMappingToolTask">
        <classpath /> <!-- removed classpath for the sake of making this post short -->
    </taskdef>
    <target name="reversemap">
        <reversemappingtool package="com.whatever.db" directory="${basedir}/src" metadata="none" generateAnnotations="true">
            <config propertiesFile="persistence.xml" />
        </reversemappingtool>
    </target>
</project>

而且,我的persistence.xml看起来

代码语言:javascript
复制
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
  <persistence-unit name="openjpa">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <properties>
      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/db"/>
      <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
      <property name="openjpa.ConnectionUserName" value="user"/>
      <property name="openjpa.ConnectionPassword" value="password"/>
      <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
    </properties>
  </persistence-unit>
</persistence>

所以。我觉得这样就行了。希望如果其他人想知道如何使用ant和java完成反转地图,这将有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25256691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档