web-dev-qa-db-ja.com

クラスは管理されていますが、persistence.xmlファイルにリストされていません

プロジェクトで次の例外が発生します。

クラス「com.testApp.domain.Register」は管理されていますが、persistence.xmlファイルにリストされていません

私のpersistence.xmlファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    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">

    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.archive.detection" value="class, hbm" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />

            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:." />
            <property name="hibernate.connection.username" value="SA" />
            <property name="hibernate.connection.password" value="" />

            <property name="hibernate.c3p0.min_size" value="5" />
            <property name="hibernate.c3p0.max_size" value="20" />
            <property name="hibernate.c3p0.timeout" value="300" />
            <property name="hibernate.c3p0.max_statements" value="50" />
            <property name="hibernate.c3p0.idle_test_period" value="3000" />

        </properties>
    </persistence-unit>

</persistence>

私はこれを試しました postthis 、どちらも手動または自動でpersistence.xmlにクラスを追加することを提案しています。他の人は、それがEclipse関連の問題であり、プロジェクトをクリーンアップまたは再開することで解決できると言います。ただし、これらのクラスが休止状態によって自動検出され、手動でpersistence.xmlに追加されないようにする必要があります。

解決策と私のエラーを解決するための提案はありますか?

お返事ありがとうございます!

更新

私のapplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="
                        http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                        http://www.springframework.org/schema/jee 
                        http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
                        http://www.springframework.org/schema/security
                        http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <context:component-scan base-package="com.testApp" annotation-config="true" />

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="default" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

</beans>
7
Anna.Klee

Springを使用している場合は、persistence.xmlファイルを回避し、代わりに次のようなエンティティマネージャーファクトリを宣言できます。

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="yourDataSource" />
    <property name="packagesToScan" value="com.testApp.domain" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />
        </bean>
    </property>
</bean>

com.testApp.domainパッケージ(@Entityアノテーションでマークされている)内のすべてのエンティティは、XMLで宣言せずにロードされます。

[〜#〜] update [〜#〜]データソースを宣言する必要があります。次に例を示します。

<bean id="yourDataSource" class="org.Apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:mem:." />
    <property name="username" value="SA" />
    <property name="password" value="" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="20" />
</bean>

そうすれば、entityManagerを今までとまったく同じように使用できます。 DAOクラスで同様のものを使用していると思います。

@PersistenceContext
private EntityManager em;
3
davioooh

Eclipseを使用している場合:(1)次を選択します:(プロジェクト)->プロパティ-> JPA; (2)「永続クラス管理」を探し、「注釈付きクラスを自動的に検出する」オプションを選択します。 (3)「適用」を押します。

47
gleitonfranco

Eclipseの問題である場合は、以下にアクセスしてください。

Preferences >> Java Persistence >> JPA >> Errors/Warnings >> Type

次のイテンスで、Ignoreとしてマークします。

  • クラスには注釈が付けられていますが、persistence.xmlファイルにリストされていません
  • クラスは管理されていますが、persistence.xmlファイルにリストされていません
4
PedroPK