Currently in 6.0 we have the notion of a Navigable which models any "piece" of the application's domain model[1]. We also have the notion of a NavigableVisitationStrategy which defines the strategy for handling the visitation of the nodes in a Navigable tree. In other words, Hibernate defines a common visitor for how to walk the application's mapped domain model and the NavigableVisitationStrategy implementation controls which sub-trees are walked; e.g. we'd use this to apply JPA EntityGraphs or to stop joining joinable Navigables after we have reached the `max_fetch_depth` setting value.
It is important to note that this is very, very different from JPA's model and walking it. JPA's model essentially precludes those model nodes from defining relational mappings as part of its type system in any sane way; this is due to various reasons because of the model's design[2]. This Navigable walking would walk the real/full relational mapping model. The design question is whether we want to expose this "domain mode walking" as a general public API feature. This has been requested before; Max once asked for it although I forget why. Making this an API means exposing quite a few things. Typical visitor pattern, the visitor (NavigableVisitationStrategy) exposes "handle" methods based on specific Navigable sub-types. Those sub-types would need to be moved to API. I don't have a particular concern with that, just mentioning it. Opinions on whether this should become an API? For sure we'd mark it @Incubating, if we decide to do it. [1] Short synopsis: Navigables include things like EntityPersister, CollectionPersister, EmbeddedPersister, PersistentAttribute, CollectionIndex, CollectionElement. A Navigable is always relative to a NaviagbleSource. NaviagbleSources are any domain Navigable (NavigableSource extends Navigable) which includes things like EntityPersister, EmbeddedPersister, SingularPersistentAttribute, CollectionElementEntity, CollectionElementEmbedded, etc . The NaviagbleSource will be null in the case of EntityPersister (as a root), but in all other cases the NaviagbleSource is non-null. [2] I won't get into the reasons here, but we can certainly follow up if anyone challenges that assertion. _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev