Java - JPA - Почему нам нужно более одного тега <persistence-unit> в файле persistence.xml? - PullRequest
4 голосов
/ 06 апреля 2010

Я изучаю JPA. Я читал о файле persistence.xml. Он может содержать более одного тега <persistence-unit> в теге <persistence>.

Насколько я понимаю, <persistence-unit> определяет:

  • Настройки подключения дБ
  • классы (классы сущностей), файлы JAR и файлы сопоставления
  • информация о поставщике

Тогда зачем нам нужно группировать сущности нашего приложения на разные <persistence-unit>. Все объекты любого приложения должны быть в одном теге <persistence-unit>.

Единственная причина, по которой я считаю, что нам нужно более одного <persistence-unit>, - это когда нам нужно установить соединение с несколькими хранилищами данных.

Q1. Есть ли другие ситуации, когда нам нужно более одного тега <persistence-unit>?

Ответы [ 3 ]

4 голосов
/ 06 апреля 2010

Персистентная единица представляет собой хранилище данных.Ваш вопрос немного пахнет тем, что вы ожидаете, что у вас может быть несколько хранилищ данных для абсолютно одинаковых данных.Это не имеет никакого смысла.Принцип работы <persistence-unit> вполне понятен.Определение параметров подключения к БД, сопоставлений сущностей и т. Д. Для уникального и независимого хранилища данных.Вы можете добавить больше, но они будут полностью независимы друг от друга.Если вы хотите или ожидаете связать несколько хранилищ данных друг с другом, то решение следует искать на более низком уровне, а именно в самом хранилище данных.

2 голосов
/ 06 апреля 2010

Я думаю, что вы ответили на свой вопрос:

Единственная причина, по которой я считаю, что нам нужно более одного, - это когда нам нужно установить соединение с более чем одним хранилищем данных.

Файлы конфигурации, в данном случае persistence.xml, должны быть гибкими и однозначными. Если вы можете опустить тег в случае наличия только одной единицы персистентности, вы вносите ненужную двусмысленность. Кроме того, он вносит сложности в проверку XML-схемы.

0 голосов
/ 05 июля 2011

Я использую его для тестирования JUnit. У меня другой источник данных для моей памяти hsqldb и моего реального хранилища данных приложения. Единственное предостережение - я должен явно указать имя единицы противозачаточных средств в коде

/**
 * Injected entity manager factory. Do not instantiate {@link EntityManager}
 * at a class level.
 */
@PersistenceUnit(unitName = "default")
private transient EntityManagerFactory emf;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...