如何在 JPA 2.0 中自动检测实体

Posted

技术标签:

【中文标题】如何在 JPA 2.0 中自动检测实体【英文标题】:How to auto detect entities in JPA 2.0 【发布时间】:2013-04-11 20:56:19 【问题描述】:

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

【问题讨论】:

【参考方案1】:

你需要添加到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>

【讨论】:

【参考方案2】:

从 Spring 3.1 开始,您还可以选择完全使用 forget persistence.xml,并使用 packagesToScan 属性配置您的 EntityManagerFactory,类似于:

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

【讨论】:

我知道,但我询问了 JPA persistence.xml 我知道,我也只是想提一下这个选项,因为它是解决手头问题的好方法(自动检测实体类)。【参考方案3】:

在此处查看 Pascal Thivent 的答案:Do I need <class> elements in persistence.xml?

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

引用它

【讨论】:

以上是关于如何在 JPA 2.0 中自动检测实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RichEdit 2.0 中自动检测 url?

如何阻止 eclipse 从表中自动创建 JPA 实体?

Eclipselink 未检测到脏实体

如何在 Spring Boot 中实现通用 JPA 存储库 - 它可以自动装配到任何实体/类类型的 Spring 服务中

Django会自动检测最终用户的时区吗?

技术JavaSE环境下JPA实体类自动注册