[hibernate-dev] 6.0 - Type redesign
Steve Ebersole
steve at hibernate.org
Fri Jul 22 13:39:14 EDT 2016
Still letting it percolate :)
On Fri, Jul 22, 2016 at 11:35 AM Emmanuel Bernard <emmanuel at hibernate.org>
wrote:
> I am eager to see what you think of my third option in my email. I dread
> there is a technical blocker somewhere but it would be quite a nice
> solution if that's not the case.
>
> On Fri 2016-07-22 14:59, Steve Ebersole wrote:
> > Some preliminary thoughts are inline. Like I said in the earlier reply I
> > am still trying to distill this in total.
> >
> > On Fri, Jul 22, 2016 at 4:14 AM Emmanuel Bernard <emmanuel at hibernate.org
> >
> > wrote:
> >
> > > The good news is that I am following you :D
> > >
> > > I think one of the option is some API to which you can pass the (JPA)
> > > Type, a Path from root and it would return a structure qualifying the
> > > embedded info and not just the embeddable.
> > >
> > > I'm making things up here
> > >
> > > //might not even need the type, could be guessed from the Path?
> > > AttributeMapping am = mappingProvider.forPath(path);
> > >
> > > What's nasty is that it then requires two parallel APIs, or rather it
> > > would not flow from an enhanced JPA type API.
> > >
> >
> > Yes, this is more or less one option I had considered... at least the
> > general approach is the same. Basically 2 separate, parallel ways to
> > describe attribute/mapping info.
> >
> > However, that said, even Path (assuming you specifically
> > mean javax.persistence.criteria.Path) includes the "context" we need; it
> > has to ultimately be rooted back to a root (#getParentPath) with mapping
> > information: we cannot build a Path rooted at an embeddable.
> >
> > So to further define these 2 "separate, parallel" models:
> >
> > 1. Type would only ever deal with the generic model information
> (aligned
> > with JPA) by Attribute. Meaning this simply describes the domain
> model -
> > more or less, obviously it does expose some simplistic persistence
> data
> > points like inheritance-type, singular attribute "classifications",
> etc
> > mandated by the JPA contracts.
> > 2. The idea of a "mapping model" would more follow this Path/Binadable
> > model. This would be the purpose of persisters and its exposed
> > "MappedAttributes"
> >
> > Yes, it would be much nicer if we could combine these models/concepts,
> but
> > I think the JPA model is just too limited to allow that.
> >
> >
> > An alternative would be what I think you propose with the BindableType,
> > > that is an extension point that describes the specifics of the
> > > specialization when navigating from one node type to another. I think.
> > >
> >
> > Yes, and no. Based on that break-down above - BindableType would just be
> > things that can be part of a Path. In fact, in JPA Bindable/BindableType
> > has no correlation to its Type. Bindable simply unifies things that can
> be
> > part of a query Path which could be either:
> >
> > 1. an EntityType
> > 2. a SingularAttribute
> > 3. a PluralAttribute
> >
> > This distinction is great because it happens to line up with how we see
> > this mapping information (with the assumption that a "root" can only ever
> > be the first - an EntityType). So I'd slightly alter this list to say
> that
> > Bindable can be either:
> >
> > 1. an EntityType*
> > 2. a SingularMappedAttribute
> > 3. a PluralMappedAttribute
> >
> > (*) - can be root.
> >
> > The idea of "MappedAttribute" would essentially be a composition of
> >
> > 1. Attribute
> > 2. MappedAttributeContainer - extension of Bindable
> >
> > I think that Path will not work for modeling since Path is specifically a
> > query concept and could be circular.
>
More information about the hibernate-dev
mailing list