Приращение класса генератора гибернации против последовательности? - PullRequest
3 голосов
/ 19 сентября 2011

Я вижу много классов генераторов на http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml для генерации идентификатора. (Официальный список здесь: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#d0e5294)

Но если я посмотрю на increment и sequence, они звучат одинаково, я не уверен, в чем разница и что лучше?

Ответы [ 3 ]

14 голосов
/ 19 сентября 2011

Sequence использует последовательность базы данных (например, в Oracle) для генерации идентификатора, тогда как increment отслеживает идентификатор в jvm и увеличивает его в процессе.Последовательность безопаснее, если в таблицу базы данных будет вставлена ​​какая-либо другая программа / человек.

Чтобы использовать последовательность:

  1. ваша база данных должна поддерживать последовательности (Oracle, DB2, Postgresql ...)
  2. Вы должны создать последовательность (CREATE SEQUENCE mySquence;)

Increment - это менее безопасное решение (но переносимое для тех БД, которые не поддерживают Sequence) и хорошеедля тестирования и \ или начала работы.Есть лучшие способы (например, нативные / идентификационные и т. Д.), Чем использование Increment для использования в производстве.

2 голосов
/ 20 сентября 2011

Я бы использовал автоматически сгенерированное значение. Hibernate создаст лучшую стратегию для используемой вами БД.

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

Также означает, что вы можете проверить простую в памяти БД, такую ​​как HsqlDB, не изменяя свои сущности.

0 голосов
/ 16 июля 2015

Вы можете попробовать эту строку

@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...