Можете ли вы настроить JPA для использования UUID для @Version в оптимистичном параллелизме?

Есть ли способ настроить или переопределить аннотацию JPA @Version для использования строк (UUID)?

У меня есть простой пример оптимистичного параллелизма, работающего с использованием int в соответствии с примерами.

int version

@Version
Public Integer getVersion ()
    return version;
...

Вместо этого у нас есть требование рассмотреть использование GUID для управления версиями (в настоящее время хранится в базе данных Postgres как символ, варьирующийся от 100).

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

String version

@Version @GeneraedValue(generator="system-uuid")
Public String getVersion ()
    return version;
...

в основном я думаю, что именно так вы используете UUID для первичных ключей. Я думаю, если бы это сработало, они бы задокументировали это!

Я уверен, что слышал, что это возможно, хотя мой первоначальный поиск в Google ничего не дал, поэтому я решил спросить, делал ли кто-нибудь это раньше или мог бы указать мне направление грубого подхода (я' м, предполагая, что это будет немного глубже, чем моя простая попытка)?


person Jean de Florette    schedule 23.01.2019    source источник


Ответы (1)


Нет, спецификация JPA не позволяет этого. Основанный на времени или на основе числа. И у вас, конечно, никогда не будет стратегии генерации для одного, поскольку это для ПК, и поскольку версия назначается непосредственно поставщиком JPA.

Из javadoc для @Version

Для свойств версии поддерживаются следующие типы: int, Integer, short, Short, long, Long, java.sql.Timestamp.

person Community    schedule 23.01.2019
comment
Но есть также предложение в документации для тега @Version, в котором говорится: «Столбец версии может быть любого типа, если вы определяете и реализуете соответствующий тип UserVersionType». ? Раньше я не использовал UserVersionType, поэтому я рассмотрю это немного подробнее, если вы не знаете, что я на неправильном пути... - person Jean de Florette; 24.01.2019
comment
Этого нет ни в спецификации JPA, ни в UserVersionType. Это, по-видимому, специфично для Hibernate, непереносимо. Иди туда, и это на твоей голове. Поскольку в вашем вопросе говорится, как настроить JPA, я отвечаю за JPA. - person ; 24.01.2019
comment
справедливое замечание хорошо сделано. Я приму ответ и открою конкретный вопрос о спящем режиме. - person Jean de Florette; 24.01.2019