2012-10-21 101 views
0

所以我決定給OpenJPA一個去,到目前爲止我沒有運氣。 我盡力做到了這一點:http://struberg.wordpress.com/2012/01/08/jpa-enhancement-done-right/ org.apache.openjpa.persistence.ArgumentException:類「com.MyClass」沒有得到增強。是問題所在。OpenJPA,Tomcat 7,Eclipse和maven-enchance不起作用

我試圖按照這些步驟來解決它,因爲我對ANT很不熟悉。

  • 添加Maven插件

    <plugin> 
         <groupId>org.apache.openjpa</groupId> 
         <artifactId>openjpa-maven-plugin</artifactId> 
         <version>2.2.0</version> 
         <configuration> 
          <includes>com/myproject/core/domain/*.class</includes> 
          <addDefaultConstructor>true</addDefaultConstructor> 
          <enforcePropertyRestrictions>true</enforcePropertyRestrictions> 
    
          <!-- Pass additional properties to the Plugin here --> 
          <toolProperties> 
           <property> 
            <name>directory</name> 
            <value>otherdirectoryvalue</value> 
           </property> 
          </toolProperties> 
    
         </configuration> 
         <executions> 
          <execution> 
           <id>enhancer</id> 
           <phase>process-classes</phase> 
           <goals> 
            <goal>enhance</goal> 
           </goals> 
          </execution> 
         </executions> 
    
         <dependencies> 
          <dependency> 
           <groupId>org.apache.openjpa</groupId> 
           <artifactId>openjpa</artifactId> 
           <version>2.2.0</version> 
          </dependency> 
         </dependencies> 
    
        </plugin> 
    
    • 所以現在,當嘗試我乾淨的項目,然後服務器,然後使用Maven和MVN清潔工藝類 然後,它成功地增強了班級我已經指定。

    • 啓動服務器,並嘗試一個簡單的持久化工作與休眠,這讓我:

OpenJPA的-2.2.0-r422266:1244990致命用戶錯誤> org.apache.openjpa。 persistence.ArgumentException:「類com.myproject.core.domain.MyClass」類型尚未增強。 FailedObject:[email protected] [java.lang.String] at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1823) at org.apache.openjpa.meta .ClassMetaData.resolve(ClassMetaData.java:1797) at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:822) at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:719 ) at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:643) at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:411) at org.apache.openjpa.meta .MetaDataRepository.getMetaData(MetaDataRepository.java:384)

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 
    <persistence-unit name="myproj_pu" 
     transaction-type="RESOURCE_LOCAL"> 
     <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
     <!-- MySQL --> 
     <properties> 
      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/myproject" /> 
      <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" /> 
      <property name="openjpa.ConnectionUserName" value="root" /> 
      <property name="openjpa.ConnectionPassword" value="1111" /> 
      <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

坦率地說,我不明白如何合理的工作流程應該看起來像這樣,即使我得到它的工作。也許使用另一種策略或什麼?

會喜歡一些指針和提示,當然有助於解決問題。

乾杯

回答

0

我想你錯過的唯一的事情是增加你的persistence.xml的「持久性單元」元素內以下行:

<class>com.MyClass</class> 

的增強查找內部這些類定義的persistence.xml,所以它知道哪些類增強。

+0

如果我補充說它給了我一些像「在MyClass上啓動enchancer」,但它打破說,ClassNotFoundException它的命名。很奇怪 –

+0

我認爲你的persistence.xml中的包含標記設置錯誤。確保它被設置爲com.MyClass類所在的位置。 – Templar