Doctrine ODM - укажите имя коллекции для MappedSuperclass

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

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

Скажем, у меня есть класс Base, который расширяется. Но я хочу, чтобы коллекция называлась Items. Я, очевидно, не хочу изменять аннотации во всех расширяющихся классах, поскольку они довольно избыточны и подвержены ошибкам.


person Josef Sábl    schedule 23.02.2017    source источник


Ответы (1)


Как указано в документация

Сопоставленный суперкласс не может быть документом и не может быть запрошен.

таким образом, его нельзя сопоставить ни с одной коллекцией. У вас должен быть класс с указанными аннотациями @Document и @InheritanceType, из которого будут расширяться дальнейшие документы (класс может быть abstract). Вы можете поместить его между отображаемым суперклассом или просто использовать вместо него. Кроме того, благодаря @Document сопоставленному классу вы сможете запрашивать его, возвращая конкретные классы.

person malarzm    schedule 26.02.2017
comment
Спасибо. Я упустил суть MappedSuperclass. Я почему-то всегда думал, что это псевдоним для абстрактного, и каждый абстрактный класс должен быть MappedSuperclass. Изменение сопоставленного суперкласса на документ (и сохранение его абстрактности) решило мою проблему. - person Josef Sábl; 03.03.2017