[hibernate-dev] dynamic instantiation queries

Steve Ebersole steve at hibernate.org
Fri Feb 17 08:24:59 EST 2017


For completeness:  https://hibernate.atlassian.net/browse/HHH-11501.  Let's
continue any discussion there...

On Mon, Oct 24, 2016 at 6:40 PM Steve Ebersole <steve at hibernate.org> wrote:

> Still not really understanding what you are getting at.  Do you have an
> example?
>
> The entity passed into the "DTO" would be managed.  If they wanted to
> initialize stuff on that entity it would happen just as normal for a
> managed entity.  Is that what you mean?
>
> On Mon, Oct 24, 2016, 4:34 PM Sanne Grinovero <sanne at hibernate.org> wrote:
>
> On 24 October 2016 at 21:49, Steve Ebersole <steve at hibernate.org> wrote:
> > I'm not sure what you are getting at. This is a feature Hibernate has had
> > for close to 15 years.  It's not a "new feature", I'm just proposing a
> new
> > behavior to be more consistent with what people generally expect.
>
> Yes I like the proposal; I'm just wondering if there might be some
> hidden complexities in allowing to initialise additional lazy
> properties during the query execution, as a side-effect of the
> constructor's code as I guess it might want to invoke various getters
> on the Person instance. If you say that's not a problem, then that's
> good news :)
>
> >
> >
> > On Mon, Oct 24, 2016, 3:30 PM Sanne Grinovero <sanne at hibernate.org>
> wrote:
> >>
> >> Option 2# looks very nice indeed, I'd like that as it would be useful
> >> to be able to create immutable DTOs directly from a query; but I'm
> >> wondering what kind of difficulties this might pose, for example I'd
> >> assume the DTO constructor would be able to trigger lazy loading of
> >> any property of Person?
> >>
> >> Also wondering, if we expose query results as streams in the future,
> >> would such a feature not become obsolete?
> >>
> >>
> >> On 24 October 2016 at 20:38, Steve Ebersole <steve at hibernate.org>
> wrote:
> >> > So Person is your entity, e.g.:
> >> >
> >> > @Entity
> >> > class Person {
> >> >     @Id
> >> >     Long id;
> >> >     ...
> >> > }
> >> >
> >> > For a query like `select new DTO( p ) from Person p` Hibernate
> expects a
> >> > DTO like:
> >> >
> >> > class DTO {
> >> >     public DTO(Long id) {
> >> >         ...
> >> >     }
> >> > }
> >> >
> >> > in fact a DTO like:
> >> >
> >> > class DTO {
> >> >     public DTO(Person person) {
> >> >         ...
> >> >     }
> >> > }
> >> >
> >> > will not work with Hibernate.
> >> >
> >> > What I was proposing was for adding some support for that in 6.0 based
> >> > on
> >> > the SQM work.  "Support" here could mean either:
> >> > 1) add a flag that says whether to support legacy behavior, or this
> new
> >> > behavior
> >> > 2) attempt to dynamically infer what to do (looks at available ctors)
> >> >
> >> > (2) would be awesome I think.  We'd still have to know how to handle
> >> > cases
> >> > where the "DTO" defined ctors matching both cases and which to prefer.
> >> >
> >> >
> >> > On Mon, Oct 24, 2016 at 2:31 PM Vlad Mihalcea <
> mihalcea.vlad at gmail.com>
> >> > wrote:
> >> >
> >> >> Do you mean we should allow the dynamic instantiation to resolve
> >> >> entities
> >> >> when we pass the entity identifier?
> >> >>
> >> >> I think I saw this request on StackOverflow once.
> >> >>
> >> >> Did I understand the question properly?
> >> >>
> >> >> Vlad
> >> >> ------------------------------
> >> >> From: Steve Ebersole <steve at hibernate.org>
> >> >> Sent: ‎10/‎24/‎2016 22:21
> >> >> To: hibernate-dev <hibernate-dev at lists.jboss.org>
> >> >> Subject: [hibernate-dev] dynamic instantiation queries
> >> >>
> >> >> Historically (well before JPA) HIbernate would handle dynamic
> >> >> instantiation
> >> >> queries in cases where one of the arguments being an entity-reference
> >> >> by
> >> >> passing just the entity's identifier rather than a complete reference
> >> >> to
> >> >> the entity.  To be clear, I am talking about a query like:
> >> >>
> >> >>     select new DTO( p ) from Person p
> >> >>
> >> >> Hibernate implicitly treats this like:
> >> >>
> >> >>     select new DTO( p.id ) from Person p
> >> >>
> >> >> and expects DTO to have a ctor taking the appropriate ID type.
> >> >>
> >> >> JPA came along and also defines support for dynamic instantiation
> >> >> queries,
> >> >> but does not specify one way or the other how this case should be
> >> >> handled.
> >> >> I have been told other providers interpret this the opposite way.
> >> >> Makes
> >> >> sense.  I think it is time we at least allow that as an option.  Or
> >> >> maybe a
> >> >> nicer implementation that looks for both and picks the available one
> >> >> (if
> >> >> that's not too much effort).
> >> >>
> >> >> What do y'all think?
> >> >> _______________________________________________
> >> >> hibernate-dev mailing list
> >> >> hibernate-dev at lists.jboss.org
> >> >> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >> >>
> >> > _______________________________________________
> >> > hibernate-dev mailing list
> >> > hibernate-dev at lists.jboss.org
> >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>
>


More information about the hibernate-dev mailing list