JPA @ версия - может ли она использоваться для расчета версии записи в таблице - PullRequest
1 голос
/ 20 мая 2010

Пожалуйста, рассмотрите следующую таблицу (созданную с использованием соответствующего объекта)

request
-------
id requestor type version items 
1  a         t1   1        5
2  a         t1   2        3
3  b         t1   1        2
4  a         t2   1        4
5  a         t1   3        9 

Это то, чего я хочу достичь. Поле версии является вычисляемым полем, остальные предоставляются пользователем. В основном, версия запроса должна быть рассчитана на основе комбинации запросчика и типа. Первый случай с данной комбинацией будет иметь версию 1, затем версию 2 и т. Д.

Я пробовал разные вещи, используя @version для другой сущности с тремя столбцами и соединяя две сущности с помощью ManytoOne и т. Д., Но я не смог достичь желаемого результата. Я не хочу путать вас с вещами, которые я пробовал.

Поскольку цель проста, должен быть более легкий путь? Можете ли вы помочь? - любая помощь с благодарностью!

заранее спасибо

1 Ответ

0 голосов
/ 21 мая 2010

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

  1. Использовать триггер при вставке.
  2. Использование представления SQL.
  3. Используйте специфичное для поставщика расширение для производных атрибутов, таких как @Formula в Hibernate (эта аннотация, которая позволяет сопоставить свойство с выражением SQL, а не с столбцом таблицы).

Чтобы проиллюстрировать последний вариант, вы можете объявить что-то вроде этого:

@Formula("(select count(r.id)+1 from Request r where r.requestor=requestor and r.type=type and r.id<id)")
public long getVersion() { return version; }
...