That was the main error I had. Assuming the #isVoyageRoot was inheritable. After looking at #voyageCollectionName I understood all the problems I had. I learnt a lot about its internal during the process.
Design question: Why #persistentClass answer false if a Class has no voyage root superclass? Shouldn't it raise an error or answer nil instead? Esteban A. Maringolo 2013/9/10 Esteban Lorenzano <esteba...@gmail.com> > 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 ;-) >> > >> >> >> > >