将实体从库引用到 JPA 中的另一个库

Posted

技术标签:

【中文标题】将实体从库引用到 JPA 中的另一个库【英文标题】:Referring entities from library to another library in JPA 【发布时间】:2014-08-16 04:57:31 【问题描述】:

我在我的项目中使用带有 JPA 的 Hibernate 4.3.6.Final 和带有 Java 配置的 Spring 4.0.6.RELEASE。

我有两个 jar 文件。模块1.jar 和模块2.jar。 module1.jar 有一些实体 和 module2 有一些实体。我不能使用 module2.jar 中的 module1.jar 实体而不使用 persistent.xml 和

<jar-file>module1.jar</jar-file>

是否有必要像我使用的那样拥有persistent.xml

entityManagerFactoryBean.setPackagesToScan("com.mydomain") 扫描所有 jar 文件中的所有实体。

【问题讨论】:

感谢您的回答。我在我的代码中发现了错误。我在 entityManagerFactoryBean.afterPropertiesSet(); 之后设置 packagesToScan;方法 【参考方案1】:

不,如果你用setPackagesToScan()配置Spring的entityManagerFactoryBean,则不需要使用persistence.xml

来自New Features and Enhancements in Spring 3.1:

3.1.12 没有persistence.xml 的JPA EntityManagerFactory 引导

在标准 JPA 中,持久性单元是通过特定 jar 文件中的 META-INF/persistence.xml 文件定义的,这些文件将依次搜索 @Entity 类。在许多情况下,persistence.xml 仅包含一个单元名称,并且依赖于默认值和/或外部设置来解决所有其他问题(例如要使用的 DataSource 等)。出于这个原因,Spring 3.1 提供了一个替代方案:LocalContainerEntityManagerFactoryBean 接受一个 'packagesToScan' 属性,指定基本包以扫描 @Entity 类。这类似于用于本地 Hibernate 设置的 AnnotationSessionFactoryBean 的同名属性,也类似于用于常规 Spring bean 的 Spring 组件扫描功能。 实际上,这允许无 XML 的 JPA 设置,而仅以指定用于实体扫描的基本包为代价:特别适合依赖于 Spring bean 组件扫描的 Spring 应用程序,甚至可能使用基于代码的 Servlet 3.0 初始化程序进行引导。

【讨论】:

以上是关于将实体从库引用到 JPA 中的另一个库的主要内容,如果未能解决你的问题,请参考以下文章

带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用

JPA - 一个实体如何引用多对多关系中涉及的两个其他实体?

取消引用的休眠 (JPA) 实体会发生啥情况?

JPA 级联持续存在并且对分离实体的引用会引发 PersistentObjectException。为啥?

JPA mappedBy 引用了一个未知的目标实体

Spring-Data JPA:保存引用现有实体的新实体