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 и низкий уровень активности в соответствующем списке рассылки.