11

我很确定我过去在 JPA 2.0 中使用了某种自动检测带有 @Entity 注释的 bean,但我不知道如何。您如何做到这一点,而不是class在persistence.xml 的XML 元素中列出每个bean?

4

3 回答 3

22

您需要添加到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>
于 2013-04-18T16:21:21.700 回答
10

从 Spring 3.1 开始,您还可以选择完全忘记 persistence.xml,并配置您的EntityManagerFactoryusingpackagesToScan属性,类似于:

<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>
于 2013-04-18T16:26:36.707 回答
0

请参阅此处的 Pascal Thivent 答案:我需要 <class> 元素在 persistence.xml 中吗?

你有不同的方法来做到这一点,但 JPA 本身不支持自动扫描。引用实体恕我直言的最简单和最干净的方法是将模型打包在 jar 中并使用<jar-file>MyModel.jar</jar-file>

于 2013-04-19T06:56:00.347 回答