Несколько единиц сохраняемости JPA указывают на одну и ту же базу данных?

Можем ли мы иметь более одной единицы персистентности JPA, указывающей на одну и ту же базу данных, в разных проектах Java и развернутых на сервере одновременно? Под одним и тем же временем я подразумеваю развертывание не в одну и ту же секунду, а совместное развертывание. Я использую базу данных hsqldb.

У меня есть модель клиент-сервер для моего проекта. У меня есть одна единая таблица базы данных, в которой сервер заполняет данные, а затем клиент обращается к этим данным в другом проекте. Я могу успешно заполнить базу данных через сервер. Но когда я развертываю клиентский проект, все данные из базы данных стираются.

Я использую <property name="hibernate.hbm2ddl.auto" value="update" /> для обоих единиц сохраняемости.


person Vashishtha Jogi    schedule 08.10.2010    source источник


Ответы (1)


Можем ли мы иметь более одной единицы персистентности JPA, указывающей на одну и ту же базу данных, в разных проектах Java и развернутых на сервере одновременно?

Если у вас нет несовместимых сопоставлений в обоих проектах, это должно работать. Однако вы не сможете использовать кэширование второго уровня.

Но когда я развертываю клиентский проект, все данные из базы данных стираются. (...)

Это не совсем то поведение, которое я ожидал бы от hbm2ddl.auto, установленного на update, но я не знаю, хорошо ли определено поведение при использовании в «кластерной» среде (с несколькими JVM, выполняющими обновление одновременно).

Что происходит, когда вы развертываете клиент после завершения инициализации серверной части?

Мои советы:

  • Настройте ведение журнала, чтобы видеть, что происходит точно
  • Если вы используете одни и те же объекты, возможно, не делайте update на клиенте и сервере (хотя это не должно быть проблемой, если делать это один за другим).
  • В конечном счете, вообще не используйте update в рабочей базе данных.
person Pascal Thivent    schedule 08.10.2010
comment
Вы имеете в виду развертывание только клиента и удаление сервера? - person Vashishtha Jogi; 08.10.2010
comment
@Vashishtha Нет, я имею в виду развертывание клиента и сервера, но только после завершения обновления схемы. - person Pascal Thivent; 08.10.2010
comment
@Pascal Я делаю то же самое. Но он не работает :( - person Vashishtha Jogi; 08.10.2010
comment
@Vashishtha Извините, но это не работает, ничего не говорит о проблеме. Активируйте ведение журнала, как было предложено, объясните, что вы сделали или изменили, каков текущий результат. - person Pascal Thivent; 08.10.2010
comment
@Pascal Извините за такую ​​расплывчатость. Я сделал следующее: 1) Включил ведение журнала 2) Развернул сервер, а затем клиент. В журналах я вижу операторы вставки при запуске сервера. Но когда я запускаю клиент, блок сохраняемости сервера не развертывается, а затем развертывается блок сохраняемости клиента, очищая все данные в базе данных. - person Vashishtha Jogi; 08.10.2010
comment
@Vashishtha Ну, я понятия не имею, почему сервер не развертывается. На самом деле, я не уверен, что понимаю всю архитектуру, какие компоненты задействованы и т. д. ИМХО, вам следует уточнить свой вопрос, добавить указанные вами детали в комментариях. Тогда, может быть, кто-то сможет прийти с объяснением. - person Pascal Thivent; 09.10.2010