0

そこで、OpenJPAを試してみることにしましたが、今のところ運がありません。http://struberg.wordpress.com/2012/01/08/jpa-enhancement-done-right/ org.apache.openjpa.persistence.ArgumentException:タイプ「classcom.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 process-classesを使用すると 、指定したクラスが正常に拡張されます。

    • サーバーを起動し、Hibernateで機能する単純な永続化を試してください。

openjpa-2.2.0-r422266:1244990致命的なユーザーエラー> org.apache.openjpa.persistence.ArgumentException:タイプ「classcom.myproject.core.domain.MyClass」は拡張されていません。FailedObject:com.myproject.core.domain.MyClass@aecda16 [java.lang.String] at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1823)atorg.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)atorg.apache.openjpa.meta.MetaDataRepository。

    <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>

率直に言って、私はそれを機能させたとしても、これで合理的なワークフローがどのように見えるかを本当に理解していません。多分別の戦略か何かを使用しますか?

いくつかのポインタとヒントが大好きで、もちろん問題を解決するのに役立ちます。

乾杯

4

1 に答える 1

0

見逃したのは、persistence.xml の「persistence-unit」要素内に次の行を追加したことだけだと思います。

<class>com.MyClass</class>

エンハンサーは、persistence.xml 内でこれらのクラス定義を探して、強化するクラスを認識します。

于 2012-10-22T04:35:16.147 に答える