首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenJPA + MySQL问题

OpenJPA + MySQL问题
EN

Stack Overflow用户
提问于 2012-03-13 21:14:02
回答 2查看 3.2K关注 0票数 0

我一直在和MySQL一起使用OpenJPA。这是我的persistence.xml文件。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!--
  For DB connectivity  
   -->
      <persistence version="1.0">
        <persistence-unit name="jpa">
          <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
           <class>com.Login</class>
       </persistence-unit>

       <properties>
     <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/jpa"/>
          <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
      <property name="openjpa.ConnectionUserName" value="root"/>
      <property name="openjpa.ConnectionPassword" value="root"/>
      <property name="openjpa.jdbc.DBDictionary"  value="mysql(SimulateLocking=true)"/>
    <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
</properties>

      </persistence>

当我执行我的Java类时,我得到一个异常,如下所示。如果我使用hibernate并在persistence.xml中更改配置,同样的代码可以很好地工作,但在OpenJPA中不能工作。有人能帮助解决这个问题吗?

代码语言:javascript
复制
Exception in thread "main" javax.persistence.PersistenceException: Explicit persistence provider error(s) occurred for "jpa" after trying the following discovered implementations: org.apache.openjpa.persistence.PersistenceProviderImpl from provider: org.apache.openjpa.persistence.PersistenceProviderImpl
    at javax.persistence.Persistence.createPersistenceException(Persistence.java:244)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:186)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:72)
    at com.JPALogin.main(JPALogin.java:26)
Caused by: <openjpa-2.2.0-r422266:1244990 nonfatal general error> org.apache.openjpa.util.GeneralException: org.xml.sax.SAXException: file:/E:/work/JPAPlain/build/classes/META-INF/persistence.xml [Location: Line: 5, C: 28]: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'persistence'.
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource(XMLMetaDataParser.java:427)
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:347)
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:324)
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:297)
    at org.apache.openjpa.persistence.PersistenceProductDerivation$ConfigurationParser.parse(PersistenceProductDerivation.java:772)
    at org.apache.openjpa.persistence.PersistenceProductDerivation.parseResources(PersistenceProductDerivation.java:556)
    at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:522)
    at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:336)
    at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:86)
    at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:153)
    at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:62)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:152)
    ... 2 more
EN

回答 2

Stack Overflow用户

发布于 2012-03-13 22:48:59

你试试这样怎么样?

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <!-- For DB connectivity -->
    <persistence-unit name="jpa">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>com.Login</class>
        <properties>
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/jpa" />
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
                    <property name="openjpa.ConnectionUserName" value="root" />
                    <property name="openjpa.ConnectionPassword" value="root" />
                    <property name="openjpa.jdbc.DBDictionary" value="mysql(SimulateLocking=true)" />
                    <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
                </properties>
    </persistence-unit>
</persistence>
票数 1
EN

Stack Overflow用户

发布于 2012-03-13 21:20:07

SAXParseException: cvc-elt.1:找不到'persistence‘元素的声明。在org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource

我不能确定,但是看起来您的persistence.xml文件的XML解析器正在尝试根据DTD验证XML,但它抱怨说它无法获得(有用的) DTD。您可能希望将XML文件的第一行更改为以下内容:

代码语言:javascript
复制
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

我不希望无效的XML文件或丢失的DTD导致解析器崩溃并引发神秘的异常。因此,如果这是问题的原因,我会说持久性提供程序代码中有一个bug。我预计会有一个更有用的异常,它会显示一条消息说“无效的XML",或者类似的消息。

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

https://stackoverflow.com/questions/9684659

复制
相关文章

相似问题

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