Hibernate и EclipseLink-совместимая конфигурация TableGenerator - PullRequest
0 голосов
/ 30 октября 2018

TL; DR : Каким образом JPA реализует пользовательский TableGenerator для сущностей?

В настоящее время у нас есть одна база данных MySQL, которая была изначально сгенерирована (и с тех пор изменена) с использованием EclipseLink.

Однако недавно мы решили реализовать приложение Spring Boot, которое обращается к базе данных, и Hibernate был выбран в качестве поставщика сохраняемости.

Первичные ключи (идентификаторы) сущностей генерируются следующим образом (на примере Host.java):

@Id
@TableGenerator(name = "Host.id", schema = "schema", table = "SEQUENCE", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "Host.id")
@GeneratedValue(generator = "Host.id", strategy = GenerationType.TABLE)
protected Long id;

Проблема, с которой мы сталкиваемся, заключается в том, что алгоритм, генерирующий идентификаторы для вновь создаваемых объектов, отличается между EclipseLink и Hibernate. До этого момента мне удавалось использовать следующие настройки Hibernate (persistence.xml), чтобы почти получал желаемый результат:

<property name="hibernate.id.new_generator_mappings" value="true"></property>
<property name="hibernate.id.optimizer.pooled.prefer_lo" value="true"></property>

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

Мне известна аннотация Hibernate @GenericGeneration, которая позволяет указать генератору пользовательскую реализацию IdentifierGenerator, но затем мы должны включить зависимости Hibernate в наш проект "модель данных" (который является JPA реализация независимая).

Есть ли способ изменить нашу сущность таким образом, чтобы EclipseLink и Hibernate использовали одну и ту же реализацию генератора идентификаторов? Желательно без переопределения аннотаций с файлом .xml.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...