2012-03-13 4 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에서 구성을 변경하면 동일한 코드가 제대로 작동하지만 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