no, it should not be implemented, no need to make him answer false (in fact, I never tried, but I'm pretty sure that is you reimplement isVoyageRoot to answer false in the subclasses most probably you will get a class that is transient :( ).
reason is that voyage looks the root class of a hierarchy by noticing where is #isVoyageRoot = true implemented. (again, each time I look in this "design decisions" I feel a bit ashamed... but well, they looked good at the moment :) ) Esteban On Sep 10, 2013, at 5:06 PM, Esteban A. Maringolo <emaring...@gmail.com> wrote: > Esteban, > > I didn't know about the #isVoyageRoot difference based on where was the > method defined. > > I mean... if I define > Member class>>#isVoyageRoot > ^true > > why sould SingleMember answer false? > > Do I have to redefine it to answer false in each of Member subclasses? > > Regards! > > > > > > Esteban A. Maringolo > > > 2013/9/10 Esteban Lorenzano <esteba...@gmail.com> > Hi, > > what happens is that if you declare a "kind", you forces all elements to be > of that specific class. > Solution is just not add that property: > > <mongoDescription> > ^VOMongoToManyDescription new > attributeName: 'members'; > accessor: #members; > "kind: Member; " > "<-- NO!" > beLazy; > yourself. > > And same happens in the <mongoContainer> description in the top of your > hierarchy... you must NOT declare a kind. > Also, if you want all members to go in just one collection. #isVoyageRoot has > to be implemented in the top of the hierarchy and not in the subclasses > > Member > "<-- #isVoyageRoot = true here!" > SingleMember > ComplexMember > > what happens then is that voyage will create a collection and for each > document it stores in it will also store the attribute '#instanceOf', which > will be used to retrieve the correct object. > > Esteban > > > what happens then is that > > On Aug 31, 2013, at 12:53 AM, Esteban A. Maringolo <emaring...@gmail.com> > wrote: > > > More or less, I have this working. > > > > In the Group class I have a description named: > > descriptionMembers > > <mongoDescription> > > ^VOMongoToManyDescription new > > attributeName: 'members'; > > accessor: #members; > > kind: Member; > > beLazy; > > yourself > > > > > > And in the Member class I have > > descriptionGroups > > <mongoDescription> > > ^VOMongoToManyDescription new > > attributeName: 'groups'; > > accessor: #groups; > > kind: Group; > > beLazy; > > yourself > > > > > > > > But what if Member is an abstract class and the elements can be any of > > SingleMember or ComplexMember?, each one is stored in a separate > > collection in Mongo. > > > > If I do specify #kind: Member in my #descriptionMembers it won't work. > > > > Any ideas? > > > > Regards, > > > > > > Esteban A. Maringolo > > > > > > 2013/8/30 Esteban A. Maringolo <emaring...@gmail.com>: > >> 2013/8/30 James Foster <smallt...@jgfoster.net>: > >>> It seems that I mistook the question for something easy enough for me to > >>> answer! Unfortunately, I don't have any knowledge of Voyage+MongoDB so > >>> can't really give the proper answer. > >> > >> Thanks anyway, it is a problem you'll never find in GemStone/S ;-) > > > > >