2012-10-21 99 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