Как автоматически обнаруживать объекты в JPA 2.0

Я уверен, что в прошлом я использовал какое-то автоматическое обнаружение beans, аннотированное с @Entity в JPA 2.0, но я не могу узнать, как это сделать. Как вы это делаете, а не перечисляете каждый bean в элементе XML class в файле persistence.xml?

Ответ 1

Так как Spring 3.1, вы также можете забыть persistence.xml и настроить EntityManagerFactory с помощью packagesToScan, похожее на это:

<bean id="entityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
      p:dataSource-ref="dataSource"
      p:packagesToScan="${jpa.entity.packages}">

    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
              p:showSql="${hibernate.show_sql}"/>
    </property>

    <property name="jpaProperties">
        <props>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        </props>
    </property>
</bean>

Ответ 2

Вам нужно добавить в persistence.xml следующую строку:

<exclude-unlisted-classes>false</exclude-unlisted-classes>

например.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" ...>
    <persistence-unit name="YourPU" ...>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="eclipselink.logging.level" value="ALL"/>
            <property name="eclipselink.ddl-generation" 
                value="drop-and-create-tables"/>
        </properties>
    </persistence-unit>
</persistence>

Ответ 3

См. Pascal Thivent здесь: Нужно ли мне <class> элементов в persistence.xml?

у вас есть другой способ сделать это, но сама JPA не поддерживает автоматическое сканирование. Самый простой и чистый способ ссылки на ваши объекты IMHO - это упаковать вашу модель в банку и ссылаться на нее с помощью <jar-file>MyModel.jar</jar-file>