Hibernate / JPA слияние на основе уникального ключа вместо первичного ключа

В Hibernate 5.1.0 / JPA 2.1 есть ли способ слияния, основанный на уникальном ключе, а не на первичном ключе?

У меня есть значения для уникального ключа в качестве ввода из внешней системы, но ввод, очевидно, не содержит мой внутренний первичный ключ.

Я хотел бы иметь возможность позвонить EntityManager#merge(entity) и, если первичный ключ entity не равно нулю, пусть Hibernate / JPA использует первичный ключ для слияния, но, если первичный ключ равен нулю, используется уникальный ключ для слияния (т. е. если первичный является нулевым, и если уникальный ключ соответствует строке в В базе данных строка будет обновлена, но если в базе данных нет строки, соответствующей уникальному ключу, будет добавлена ​​новая строка).

0 ответов

По определению - это спецификация JPA - документ, также известный как JSR 338 - нет способа аннотировать желаемое поведение, которое по сути можно сократить до:

если первичный ключ сущности не null , Hibernate / JPA использует первичный ключ для объединения, но, если первичный ключ null используйте уникальный ключ для объединения

на @Entity учебный класс.

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

Тем не менее, не стесняйтесь предлагать запрос функции в проекте JPA-API Github, поддерживаемом фондом Eclipse.

Надеюсь, поможет.

Сноски

Version В версии 2.2 или предыдущей версии 2.1 / 2.0

² Смотрите расписание на https://projects.eclipse.org/projects/ee4j.jpa и низкий уровень активности в соответствующем списке рассылки.

Другие вопросы по тегам