Подтвердить что ты не робот

Имя поля "ClassName" вставляется в mongodb морфией

Я новичок в mongodb и morphia, после того, как я начал использовать его, я понимаю, что в документе mongodb есть дополнительная часть, запись содержит зарегистрированное имя "ClassName" со значением класса, отображаемого морфией.

{ "_id" : ObjectId("51e7a85e300441e5885316c0"), "className" : "models.User", "imgurl" : "", "uname" : "alex"}

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

4b9b3361

Ответ 1

Вы можете явно отключить атрибут className: @Entity(noClassnameStored = true)

Я вообще подавляю атрибут, если есть один класс сущности. Если я подклассифицирую свою сущность, я явно разрешаю ее (это значение по умолчанию, но для этого обязательно).

Если я не ошибаюсь, Morphia достаточно умен, чтобы угадать правильный подкласс на основе свойств, даже если нет className (на основе отражения). Поэтому, если у вас есть атрибут mongoKnowledge в вашем подклассе Developer Person, и ваш подкласс Manager его не имеет, Morphia будет знать, что документы с mongoKnowledge должны быть класса Developer. Поэтому строго говоря className требуется только в том случае, если ваши подклассы имеют одинаковые атрибуты; однако я бы не стал слишком полагаться на это.

Я не пытался переименовать классы сущностей, но это, вероятно, вызовет проблемы. Существует давняя проблема, чтобы предоставить аннотацию @Polimorphic и исправить ее вместе с этим. См. https://code.google.com/p/morphia/issues/detail?id=22

Ответ 2

Это нормально. Поскольку Morphia поддерживает полиморфизм, значит, подклассы должны храниться в том же сборнике, где суперкласс сохраняется. Чтобы дифференцировать/отфильтровать при запросе и хранении, он использует это поле. Надеюсь, вы также будете использовать Morphia для запросов. Как вы думаете, это влияет на целостность ваших данных, поскольку вы можете легко отфильтровать его.

Спящий режим также имеет столбец дискриминатора для поддержки полиморфизма.

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-discriminator