2012-03-13 48 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