On Dec 16, 2007, at 1:49 PM, Aristedes Maniatis wrote:

Current EmbeddedAttribute extends Attribute, but I wonder whether it should be extending ObjAttribute.

I don't think it meets a criteria for inheritance, not with ObjAttribute superclass in its current form, as EmbeddedAttribute has no dbAtributePath.

If it were to do so, lots of nice simplification will be had by having getAttributes return Collection<ObjAttribute> rather than Collection<Attribute> (and the equivalent for getRelationships and also the same for DbEntity).

Actually there is a bigger problem that prevents us from making these simplifications. And that is "coincidental" common superclasses: Entity, Attribute, Relationship. I.e. IMO Db* and Obj* should not be in the same hierarchy. But changing that now with backwards compatibility in mind is fairly non-trivial.


If not, then there appear to be places in Cayenne which assume the collection just contains ObjAttributes:

EntityMergeSupport.getMeaningfulFKs()  (line 170)
PrefetchProcessorJointNode (line 205)
and more...

Correct, this assumption is no longer true.

It does seem to me that EmbeddedAttribute should logically extend ObjAttribute since it is a specialised case of one. What do you think?

I don't think one should inherit from another (see above). Having a common superclass for both may be more appropriate.

Andrus

Reply via email to