я имею 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
,
Я ищу изящный способ достижения цели:
Задача ещё не решена.
Других решений пока нет …