Объединить два проекта с другой конфигурацией persistence.xml? Использовать EclipseLink без JPA?

67
7

В JPA есть два проекта, которые говорят с одной и той же базой данных (но с разными таблицами). Один с Hibernate (плюс весна), один с EclipseLink. Проекты должны быть объединены: теперь нужно позвонить другому.

Оба имеют конфигурацию persistence.xml, но с определенными вендорами. Слияние обоих persistence.xml не было успешным, как вы можете себе представить. Рефакторинг одного проекта не может быть и речи.

Мне было интересно, можно ли перестать полагаться на JPA (чтобы избежать конфликта persistence.xml), но все равно получить что-то с Persistence.createEntityManagerFactory и совместимо с аннотированным @javax.persistence.Entity s.

спросил(а) 2016-08-11T17:50:00+03:00 3 года, 11 месяцев назад
1
Решение
54

Нет, вы не можете (легко) "перестать полагаться на JPA". JPA - это API, который представляет собой список классов и методов, используемых вашим приложением для работы с базами данных. Не использовать JPA означает полное переписывание уровня вашей базы данных, чего вы, вероятно, хотите избежать.

Тем не менее, вы можете продолжать использовать два persistence.xml бок о бок (возможно, объединены в один файл). Для этого вы бы поддерживали два контекста сохранения JPA параллельно, то есть у вас было бы два разных EntityManagerFactory в вашем коде для разных частей вашего (объединенного) приложения.

Это иногда усложняет жизнь, потому что такие вещи, как Spring-интеграция JPA, обычно предполагают, что существует только один контекст постоянства, но это должно быть выполнимо.

Хотя ваш случай кажется довольно уникальным, одной из общих причин одновременного использования нескольких контекстов постоянства является необходимость доступа к нескольким базам данных из одного приложения. См. Например, persistence.xml для нескольких единиц измерения продолжительности, как это может работать.

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

Попробуйте использовать две единицы непрерывности параллельно, и если вы застряли, задайте новый вопрос :-).

ответил(а) 2016-08-11T19:16:00+03:00 3 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема