A mapping can refer both to itself and to the mappings to deal with recursive relationships. The only thing to consider is to create all of the mappings and associate them at the same time (don't call a method to create a mapping as you are likely to end up with an infinite call loop).
In pseudo code:
Mapping *myMapping = ...;
[myMapping addRelationshipFor:... withMapping:myMapping];
which will create a mapping to deal with an object which contains other copies of the same object. The same approach can be taken when there is a recursive relationship between 2 objects:
Mapping *myMapping = ...;
Mapping *myOtherMapping = ...;
[myMapping addRelationshipFor:... withMapping:myOtherMapping];
[myOtherMapping addRelationshipFor:... withMapping:myMapping];