@Version
предназначен для оптимизации c и не должен использоваться для этого.
Как и Тейлор прокомментировал, вы можете использовать Hibernate Envers для чего-то действительно похожего. Это приведет к созданию отдельной таблицы, содержащей все ваши версии, в то время как основная таблица, в которую вы отображаете свою сущность, по-прежнему имеет только текущую версию.
Если вы хотите, чтобы все эти сущности фактически находились в одной таблице, вам следует просто сделайте существующий идентификатор плюс дополнительное поле версии идентификатором, а затем скопируйте объект и обновите версию перед ее изменением. Поле версии здесь означает обычное поле с цифрой c, которое вы используете в качестве версии, оно не должно быть аннотировано @Version
.
Если вы действительно хотите использовать атрибут @Version
Вы можете создать триггер для базовой таблицы, который будет создавать новую строку при каждом обновлении.