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.knoefel@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.