Создайте последовательность с использованием JPA2, поддержанную hibernate - PullRequest
2 голосов
/ 08 февраля 2012

Мне нужно иметь возможность получить последовательный номер (я не против, если в поколении есть дыры), и я думаю, что SQL-последовательность идеально подойдет для этого.

Я работаю с платформой Play, и она использует JPA2 с поддержкой hibernate.

Моя проблема сейчас заключается в том, что я не могу заставить Hibernate генерировать последовательности как часть автоматического обновления ddl при запуске приложения.

Кажется, что каждая документация по использованию @SequenceGenerator связана с идентификатором сущности, а не с тем, как определить последовательность, независимую от последовательности, используемой для идентификатора сущности.

Спасибо.

РЕДАКТИРОВАТЬ: просто чтобы дать больше контекста для вопроса, то, что я делаю, это внедрение службы для хранения рекордов, когда игрок в первый раз запускает игру, он запрашивает у гостевой учетной записи сервер.

Гостевые учетные записи имеют имя пользователя в виде player + number, например "player123123", где число будет генерироваться из последовательности, которую я пытаюсь использовать.

Когда пользователь зарегистрируется, он сможет изменить имя пользователя на что-то нестандартное, но не в форме player + что-либо, так что namespace player + number остается свободным для использования для гостевых учетных записей.

РЕДАКТИРОВАТЬ2: На данный момент я заставил его работать, определив дополнительную бесполезную сущность, которая никогда не будет использоваться, и просто использую Последовательность из этой сущности, но это уродливый хак.

Игнорируя возможные решения (хаки) для моей конкретной проблемы, я хотел бы знать, возможно ли с hibernate и jpa2 объявить дополнительные (не те, которые используются для генерации идентификаторов) последовательности, связанные с объектом или независимые от любого объекта и пусть hibernate создаст их в БД автоматически.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Генераторы последовательностей (определены с использованием @SequenceGenerator) должны быть уникальными для всей единицы сохраняемости, чтобы вы могли использовать их повторно. Этот вопрос посвящен этой (более или менее) конкретной проблеме.

Следует учитывать несколько моментов:

  • Последовательности поддерживаются не всеми базами данных.поставщики, я полагаю, что Oracle и PostgreSQL их поддерживают, но я не уверен, что остальные
  • Генератор последовательностей может только быть определенным для сущностей, поэтому вы не можете использовать @MappedSuperclass
  • Play Framework будет автоматически добавлять и идентифицировать поле для ваших сущностей, если вы расширяете Model, так что имейте это в виду, если вы хотите изменить это поведение
0 голосов
/ 08 февраля 2012

Play автоматически добавляет числовое значение id в класс при расширении Model.

Учитывая, что вы не возражаете против пробелов и вам нужна только числовая последовательность, я бы предложил использовать id Play в качестве ссылки для вашей последовательности.

ПРИМЕЧАНИЕ: I 'Здесь я предполагаю, что вы хотите, чтобы эта последовательность была связана с сущностью, которая может содержать больше данных.Если это не так, это может не сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...