OpenJPA, Tomcat 7, Eclipse & maven - расширение не работает
Поэтому я решил попробовать OpenJPA, и пока мне не повезло. Я следовал этому, как мог: http://struberg.wordpress.com/2012/01/08/jpa-enhancement-done-right/ org.apache.openjpa.persistence.ArgumentException: тип "class com.MyClass" не был улучшен. это проблема.
Я попытался выполнить эти шаги, чтобы решить эту проблему, так как я довольно незнаком с 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 clean, классы процессов. Затем он успешно расширяет классы, которые я указал.
Запустите сервер и попробуйте простое сохранение, которое работает с Hibernate, и это дает мне:
openjpa-2.2.0-r422266: 1244990 фатальная ошибка пользователя> org.apache.openjpa.persistence.ArgumentException: тип "class com.myproject.core.domain.MyClass" не был улучшен. FailedObject: com.myproject.core.domain.MyClass@aecda16 [java.lang.String] в org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1823) в org.apache.openjpa.meta.Class. resolv (ClassMetaData.java:1797) в org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:822) в org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaData.Reta.Reg.7)..openjpa.meta..: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>
Честно говоря, я не совсем понимаю, как должен выглядеть разумный рабочий процесс, даже если я заставлю его работать. Может быть, использовать другую стратегию или что-то?
Хотелось бы немного указателей и советов и, конечно, помочь с проблемой.
ура
1 ответ
Я думаю, что единственное, что вы пропустили, это добавление следующей строки в элемент "persistence-unit" вашего файла persistence.xml:
<class>com.MyClass</class>
Энхансер ищет эти определения классов внутри файла persistence.xml, поэтому он знает, какие классы нужно улучшить.