2012-03-13 51 views
0

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

<?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中不起作用。任何人都可以帮助解决这个问题

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 
+0

为什么是XML元素<持久性单元>外指明你的“属性”?他们应该在里面。 – DataNucleus 2012-03-13 13:40:37

+0

是的,这是错误的。即使把它们放进去,它也没有工作 – Kaps 2012-03-15 06:33:07

回答

0

的SAXParseException:CVC-elt.1:找不到元素 '持久性' 的声明。在org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource

我不能肯定,但它看起来像你的persistence.xml文件的XML解析器正试图验证对一个DTD的XML,它抱怨,因为它无法获得(有用的)DTD。你可能会想你的XML文件的第一行更改为以下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

我不希望一个无效的XML文件或缺少DTD导致解析器带有神秘色彩的异常崩溃。所以,如果这是问题的原因,我会说持久性提供程序代码有一个错误。我希望有一个更有用的例外,并带有一条消息,说“无效的XML”,或者其他一些。

+0

感谢您的回复。我试着用你给出的那一行,但它没有解决问题。有没有其他方法来检查? – Kaps 2012-03-13 13:29:59

1

你如何尝试这样的事情?

<?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> 
+0

让我试试这个。谢谢里克。 – Kaps 2012-03-15 06:31:49