Java - JPA - 为什么我们在persistence.xml文件中需要多个<persistence-unit>标记?</persistence-unit>

时间:2010-04-06 17:06:59

标签: java jpa

我正在学习JPA。我读了一下persistence.xml文件。它可以包含<persistence-unit>标记下的一个<persistence>标记。

至于我的未成年人,<persistence-unit>定义:

  • 数据库连接设置
  • 类(实体类),jar文件和映射文件
  • 提供商信息

那么为什么我们需要将应用程序的实体分组到不同的<persistence-unit>。任何应用程序的所有实体都应该在一个<persistence-unit>标记中。

我认为我们需要多个<persistence-unit>的唯一原因是我们需要与多个数据存储区建立连接。

Q1。当我们需要多个<persistence-unit>代码时还有其他情况吗?

3 个答案:

答案 0 :(得分:4)

持久性单元表示数据存储。您的问题有一点气味,您希望您可以拥有多个数据存储区来获得完全相同的数据。这毫无意义。 <persistence-unit>的工作方式非常有意义。为唯一且独立的数据存储区定义数据库连接设置,实体映射等。您可以添加更多,但它们将完全相互独立。如果您希望或期望将多个数据存储彼此链接,则应在较低级别(即数据存储区本身)中寻找解决方案。

答案 1 :(得分:2)

我想你已回答了自己的问题:

  

我认为我们需要不止一个的唯一原因是我们需要与多个数据存储区建立连接。

配置文件(在本例中为persistence.xml)应该是灵活且明确的。如果在只有一个持久性单元的情况下可以省略标记,则会引入不必要的歧义。此外,它还引入了XML模式验证的复杂性。

答案 2 :(得分:0)

我将它用于JUnit测试。我的内存hsqldb和我的实际应用程序数据存储有不同的数据源。唯一需要注意的是我必须在代码中明确说明perstitence单位名称

/**
 * Injected entity manager factory. Do not instantiate {@link EntityManager}
 * at a class level.
 */
@PersistenceUnit(unitName = "default")
private transient EntityManagerFactory emf;