DDD сущность и ее идентификатор - PullRequest
7 голосов
/ 03 октября 2010

В моей системе есть объект, которому, естественно, нужен идентификатор, чтобы его можно было однозначно идентифицировать.Предполагая, что база данных используется для генерации идентификатора с помощью Hibernate, используя нативную стратегию, тогда, очевидно, код приложения свободен от этой ответственности присвоения идентификаторов.Теперь можно ли считать экземпляр этой сущности действительным до того, как он будет сохранен и получит свой идентификатор?Или я должен использовать какую-то другую стратегию, чтобы присвоить моим сущностям их идентификаторы, чтобы он получал свой идентификатор при вызове своего конструктора?

1 Ответ

7 голосов
/ 03 октября 2010

Это обширная тема, но здесь есть две возможности:

  • определить ваши hashCode() и equals(..) контракты на основе бизнес-ключей .Например, для объекта User это будет имя пользователя, а не автоматически сгенерированный идентификатор.Таким образом, вы сможете использовать сущность в коллекциях до того, как она будет сохранена

  • , используйте UUID в качестве первичного ключа и управляйте генерацией самостоятельно.См. эту статью Джеффа Этвуда и эту статью , демонстрирующую способ ее использования с Hibernate

(Поскольку вы упоминаете DDD и hibernate,взгляд на эту статью моего)

...