首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenJPA MappingTool MetaDataException

OpenJPA MappingTool MetaDataException
EN

Stack Overflow用户
提问于 2013-01-28 13:30:11
回答 1查看 2.4K关注 0票数 2

我正在尝试使用OpenJPA进行前向映射的过程。我想为此目的使用MappingTool,但我一直在获取MetaDataException。我提供persistence.xmlorm.xml文件作为输入,以及在类路径上编译的orm.xml类,这些类路径定义了来自orm.xml文件的对象。

我像这样运行MappingTool:

代码语言:javascript
复制
java -cp  /home/vic/openmdx/dev/openmdx2/jre-1.6/core/lib/openmdx-base.jar:/home/vic/Downloads/apache-openjpa-2.2.1/src/java:/home/vic/Downloads/apache-openjpa-2.2.1/openjpa-2.2.1.jar:/home/vic/Downloads/apache-openjpa-2.2.1/openjpa-all-2.2.1.jar org.apache.openjpa.jdbc.meta.MappingTool -p persistence.xml -schemaAction build orm.xml

编译的类文件在/home/vic/Downloads/apache-openjpa-2.2.1/src/java中的位置。

产出如下:

32 openjpa INFO主openjpa.jdbc.JDBC -使用字典类org.apache.openjpa.jdbc.sql.MySQLDictionary“。106个openjpa.Tool主openjpa.Tool-映射工具,运行在带有操作"buildSchema“的"class org.test.classDiag.jpa3.properties”类型上。407 openjpa警告主openjpa.Runtime --在“org.omg.Model1.jpa3.”412 openjpa警告主openjpa.Runtime中没有发现持久属性--在“org.omg.Model1.jpa.StrurereField$Slice”441 openjpa警告主openjpa.Runtime中没有找到持久属性--在“org.omg.Model1.jpa3. persistent $ openjpa.Runtime”455 openjpa警告主openjpa.Runtime中没有找到持久属性--在“org.omg.Model1.jpa-view$”465 openjpa警告主openjpa.Runtime中没有找到持久属性--在"org.omg.model1 org.omg.model1警告主openjpa.Runtime“中没有找到持久属性。.jpa3.Constant$Slice“504 openjpa警告主openjpa.Runtime --在"org.omg.model1.jpa3.Import$Slice”515 openjpa警告主openjpa.Runtime中没有找到持久属性--在“org.omg.Model1.jpa3.Constraint$openjpa.Runtime”线程中的异常" main“ org.apache.openjpa.util.MetaDataException: Type "class org.test.classDiag.jpa3.”中没有持久性元数据。在org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java:688) at org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java:754) at org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:652) at org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:1087) at org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:1001) at org.apache.openjpa.jdbc.meta.MappingTool$1.run(( org.apache.openjpa.lib.conf.Configurations.launchRunnable(Configurations.java:748) at org.apache.openjpa.lib.conf.Configurations.runAgainstAllAnchors(Configurations.java:738) at org.apache.openjpa.jdbc.meta.MappingTool.main(MappingTool.java:932) )

我的persistence.xml:

代码语言:javascript
复制
<?xml version="1.0"?>
<persistence 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" version="1.0">
    <persistence-unit name="openjpa"  transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
         <class>org.test.classdiag.jpa3.Animal</class>
                 <class>org.test.classdiag.jpa3.Cat</class>
                 <class>org.test.classdiag.jpa3.Dog</class>

        <properties>
            <property name="openjpa.Log" value="SQL=TRACE"/>
            <!-- <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" /> -->
            <property name="openjpa.jdbc.MappingDefaults" value="IndexLogicalForeignKeys=false,IndexDiscriminator=false"/>
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/TEST_OPENMDX"/>
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
            <property name="openjpa.ConnectionUserName" value="root"/>
            <property name="openjpa.ConnectionPassword" value="root"/>
        </properties>
    </persistence-unit>
</persistence>

我的orm.xml for Animal

代码语言:javascript
复制
<access>FIELD</access>
<entity class="org.test.classdiag.jpa3.Animal">
  <table name="OTT0CLAG_ANIMAL"/>
  <inheritance strategy="JOINED"/>
  <discriminator-value>org:test:classdiag:Animal</discriminator-value>
  <discriminator-column name="DTYPE" discriminator-type="STRING"/>
  <attributes>
    <basic name="colour">
      <column name="COLOUR" nullable="true"/>
    </basic>
    <basic name="breed">
      <column name="BREED" nullable="true"/>
    </basic>
    <basic name="name">
      <column name="NAME" nullable="true"/>
    </basic>
    <one-to-many name="openmdxjdoSlices" mapped-by="openmdxjdoIdentity">
      <map-key name="openmdxjdoIndex"/>
    </one-to-many>
  </attributes>
</entity>
EN

回答 1

Stack Overflow用户

发布于 2013-08-07 12:12:09

这是因为MappingTool使用JDBCConfigurationImpl作为默认值。将MappingTool配置为为分布式配置(DistributedJDBCConfigurationImpl)使用数据源。

为了达到这个目的,您需要从main复制MappingTool代码,并为conf创建一个DistributedJDBCConfigurationImpl,如下所示:

代码语言:javascript
复制
String[] arguments = new String[] { "-action", "buildSchema", "-foreignKeys", "false", "-openjpa.Tool", "false" };
Options opts = new Options();
final String[] args = opts.setFromCmdLine(arguments);
Configurations.runAgainstAllAnchors(opts, new Configurations.Runnable() {

    @Override
    public boolean run(Options opts) throws IOException, SQLException {
        JDBCConfiguration conf = new DistributedJDBCConfigurationImpl();
        conf.setLogFactory(new NoneLogFactory());
        try {
            return MappingTool.run(conf, args, opts);
        } finally {
            conf.close();
        }
    }
});

把论点改成你自己的。在运行您自己的工具实现之后,一切都将正常工作。

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

https://stackoverflow.com/questions/14563136

复制
相关文章

相似问题

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