Hi Sabine, Sadly there is no automatic solution for your problem. I managed to resolve that by hacking the mongo description this way:
Trip class>> isVoyageRoot = true Day class>> isVoyageRoot = false VehicleTrip class>> isVoyageRoot = false Now, the trick is that since the document will be something like: Trip { days { Day { VehicleTrip { ... day} VehicleTrip { ... day} } } } (that's of course, pseudo coding heavily ;) ) Actually, since all VehicleTrips will be part of Day subdocument, you do not need to store them. What you really need is to have the back-reference when you reconstruct the document You can achieve that by declaring transient the #day attribute of VehicleTrip and setting the day back when you read Day from the database: VehicleTrip class>>mongoDay <mongoDescription> ^ VOMongoTransientDescription new attributeName: 'day'; yourself Day class>>mongoVehicleTrips <mongoDescription> ^VOMongoToManyDescription new attributeName: 'vehicleTrips'; accessor: (MAPluggableAccessor read: [ :day | day vehicleTrips ] write: [ :day :trips | trips do: [ :each | each day: day ]. day vehicleTrips: trips ]); yourself I think that will solve your embedded-cyclic problem. yes... it is a bit hacky, but it works perfectly :) Cheers, Esteban On Aug 12, 2013, at 11:33 AM, Sabine Knöfel <sabine.knoe...@gmail.com> wrote: > Hi Esteban, > > thank you for the solution with the VOMongoToOneDescription. > This works perfect for me. > > I have to come back to the circular references. > I am not sure if this is a bug. > > I have the following model: > > Trip ->> Day <->> VehicleTrip > > One Trip has N Days. > One Day has N VehicleTrips. > The VehicleTrip points back to its Day. > The Trip is voyageRoot. > > But I dont want Day or VehicleTrip to be voyageRoot, too. > (In my opinion this does not make sense). > > If I try to save the trip, I get the endless loop. > Attention, the Image freezes then. :-) > > How would you solve this? Also with the VOMongoToOneDescription solution? > You can reproduce it with the fileout below. > > Regards > Sabine > > This is the fileout: > > Object subclass: #Day > instanceVariableNames: 'date vehicleTrips' > classVariableNames: '' > poolDictionaries: '' > category: 'RKA24-Demo'! > > !Day methodsFor: 'accessing' stamp: 'sabineknoefel 8/12/2013 11:13'! > date: anObject > > date := anObject! ! > > !Day methodsFor: 'accessing' stamp: 'sabineknoefel 8/12/2013 11:15'! > vehicleTrips: anObject > > vehicleTrips := anObject! ! > > > Object subclass: #VehicleTrip > instanceVariableNames: 'day description' > classVariableNames: '' > poolDictionaries: '' > category: 'RKA24-Demo'! > > !VehicleTrip methodsFor: 'accessing' stamp: 'sabineknoefel 8/12/2013 11:13'! > day: anObject > > day := anObject! ! > > !VehicleTrip methodsFor: 'accessing' stamp: 'sabineknoefel 8/12/2013 11:14'! > description: anObject > > description := anObject! ! > > > Object subclass: #Trip > instanceVariableNames: 'days description' > classVariableNames: '' > poolDictionaries: '' > category: 'RKA24-Demo'! > > !Trip methodsFor: 'accessing' stamp: 'sabineknoefel 8/12/2013 11:14'! > days: anObject > > days := anObject! ! > > !Trip methodsFor: 'accessing' stamp: 'sabineknoefel 8/12/2013 10:12'! > description: anObject > > description := anObject! ! > > "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! > > Trip class > instanceVariableNames: ''! > > !Trip class methodsFor: 'as yet unclassified' stamp: 'sabineknoefel > 8/12/2013 11:15'! > demo > |theTrip theDay theVehicleTrip| > theTrip := Trip new description: 'Trip to Munic'. > theDay := Day new date: Date today. > theVehicleTrip := VehicleTrip new description: 'with car to fair'. > theVehicleTrip day: theDay. > theTrip days: (OrderedCollection with: theDay). > theDay vehicleTrips: (OrderedCollection with: theVehicleTrip ). > > theTrip halt save ! ! > > !Trip class methodsFor: 'as yet unclassified' stamp: 'sabineknoefel > 8/12/2013 09:47'! > isVoyageRoot > ^true! ! > > > > > > |theTrip theDay theVehicleTrip| > theTrip := Trip new description: 'Trip to Munic'. > theDay := Day new date: Date today. > theVehicleTrip := VehicleTrip new description: 'with car to fair'. > theVehicleTrip day: theDay. > theTrip days: (OrderedCollection with: theDay). > theDay vehicleTrips: (OrderedCollection with: theVehicleTrip ). > > theTrip inspect > > > > -- > View this message in context: > http://forum.world.st/Voyage-Circular-references-tp4691940p4703303.html > Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. >