Спящий режим и идентификаторы - PullRequest
1 голос
/ 29 января 2009

Возможно ли в hibernate иметь сущность, в которой некоторые идентификаторы назначены, а некоторые сгенерированы?

Например:

Некоторые объекты имеют ID от 1 до 10000, которые генерируются вне базы данных; в то время как некоторые объекты приходят без идентификатора и нуждаются в идентификаторе, созданном базой данных.

Ответы [ 3 ]

1 голос
/ 29 января 2009

Вы можете использовать «назначенный» в качестве стратегии генерации идентификатора, но вам придется присвоить объекту его идентификатор, прежде чем вы сохраните его в базе данных. В качестве альтернативы вы можете создать собственную реализацию org.hibernate.id.IdentifierGenerator для предоставления идентификатора в предложенном вами порядке.

Я должен согласиться с Cade Roux, и, похоже, это будет гораздо сложнее, чем использование встроенного приращения, uuid или другой формы генерации идентификатора.

1 голос
/ 29 января 2009

Используйте любой генератор, который вам нравится, убедитесь, что он может начинаться со смещением (при использовании последовательности вы можете соответственно инициализировать ее).

Для всех других объектов, вызовите setId (), прежде чем вставлять их. Hibernate будет генерировать идентификатор только в том случае, если свойство id равно 0. Обратите внимание, что сначала вы должны вставить объекты с идентификаторами в базу данных, а затем работать с ними. В Hibernate много кода, который ожидает, что объект будет в БД при id! = 0.

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

1 голос
/ 29 января 2009

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

Как правило, плохая идея использовать столбцы для смешанных целей - в этом случае вывести из природы суррогатного ключа источник объекта.

...