Можно ли использовать Value Object в качестве идентификатора для Entity с Doctrine ODM?

я имею Subscription сущность, которая представляет собой одно из многих-многих отношений между пользователями в Twitter-подобной следующей модели. Он имеет суррогатный идентификатор для обеспечения уникальности отношения, представленного объектом Value SubscriptionId, SubscriptionId сохраняется как MongoBinData, Вот описание XML:

<document name="Subscription"collection="users.subscriptions"repository-class="SubscriptionRepository">
<field name="id" id="true" type="User.Subscription.Id"/>
<field name="u" fieldName="userId" type="User.Id"/>
<field name="t" fieldName="subscribedTo" type="User.Id"/>
<field name="d" fieldName="dateTime" type="PreciseDateTime"/>
</document>

Я поставил id поле для Subscription в конструкторе вручную. Проблема в том, что ODM вызывает операцию вставки вместо вставки для новых сущностей с идентификаторами. Таким образом, у меня нет шансов обнаружить дублирование (доменные события будут вызваны дважды и т. Д.). Этот код выполняется без повторяющихся исключений:

$sub = new Subscription($subscriberId, $subscribedToId);

$dm->persist($sub);
$dm->flush();

$dm->clear();

$dm->persist($sub);
$dm->flush();

Я попытался использовать генератор пользовательских идентификаторов вместо настройки id в конструкторе. Но почему-то ODM проигнорировал мой type="User.Subscription.Id" и рассматривал тип удостоверения как custom_id, У моей сущности был экземпляр MongoBinData вместо желаемого SubscriptionId,

Я ищу изящный способ достижения цели:

  1. VO как идентификатор организации
  2. Исключение дублирования при сохранении нового объекта с существующим идентификатором

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]