2012-03-13 16 views
0

私はMySQLでOpenJPAを使用しています。ここに私の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クラスを実行しているときに、以下の例外が発生しています。 persistence.xmlでhibernateと設定を変更すると、同じコードが正常に動作しますが、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

+0

それは間違いだった。それらを入れても、それは働いていません – Kaps

答えて

0

SAXParseExceptionの:CVC-elt.1:要素 '持続性' の宣言を見つけることができません。

org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource

で私は確認することはできませんが、それはDTDに対してXMLを検証しようとしているあなたの persistence.xmlファイルのXMLパーサのように見え、それ(有用な)DTDを得ることができないので、不平を言っている。次のXMLファイルの最初の行を変更する場合があります

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

私は神秘的な例外でクラッシュするパーサを引き起こすために、無効なXMLファイルや不足しているDTDを期待していません。それが問題の原因であれば、私は持続性プロバイダコードにバグがあったと言います。私は "無効なXML"、またはそのようなものを言っているメッセージと、より有用な例外を期待します。

+0

あなたの返事をありがとう。私はあなたが与えたラインで試しましたが、それは問題を解決しませんでした。それを確認する他の方法はありますか? – Kaps

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