Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm pretty new to mongodb and morphia, after starting using it, I realize that there is a extra part in mongodb document, the record contains a filed name "ClassName" with value of the class that morphia mapped.

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

is this normal? i feel it is violating the integrity of the data in the db, is there anyway to get around it?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
374 views
Welcome To Ask or Share your Answers For Others

1 Answer

You can explicitly disable the className attribute: @Entity(noClassnameStored = true)

I'm generally suppressing the attribute, if there is a single entity class. If I'm subclassing my entity, I'm explicitly enabling it (which is the default, but just to be sure).

If I'm not mistaken, Morphia is clever enough to guess the correct subclass based on the properties even if there is no className (based on reflection). So if you have an attribute mongoKnowledge in your subclass Developer of Person and your subclass Manager doesn't have it, Morphia will know that documents with mongoKnowledge must be of the class Developer. So strictly speaking className is only required if your subclasses have the same attributes; however, I wouldn't rely on it too much.

I haven't tried to rename the entity classes, but it will probably cause issues. There's a long standing issue to provide a @Polimorphic annotation and to fix it together with that. See https://code.google.com/p/morphia/issues/detail?id=22


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...