On Thu, 16 Apr 2020 at 15:42, Steve Ebersole <st...@hibernate.org> wrote:
>
> Bit off track, but since you mentioned load, etc... Take a look at the 
> IdentifierLoadAccess, etc variants for loading.  E.g.
>
> interface IdentifierLoadAccess<T> {
>     T getReference(Object id);
>     T load(Object id);
>     Optional<T> loadOptional(Object id);
> }
>
> Granted I'm partial, but I think that's pretty clear :)

Right, that's a very nice API; my "usual confusion" is addressed, and
people can choose if they like dealing with Optional.

> Reactive stuff is a bit different, but from my experience I would never ever 
> ever use something like `Optional<TheOtherEntity>` for an association.  In 
> fact back in the day this was more/less what Top Link did for to-one mappings 
> and it was fugly.  Not that you are suggesting that per-se.

I wouldn't want to impose ot people that `Optional<TheOtherEntity>` be
"the right way" but I'd like to see it as a reasonable option - when
the association isn't mandated by the schema: FK nullability.

I'm curious, why wouldn't you use it? Just personal taste, or would
you see some problem with it?

Thanks,
Sanne






>
>
> On Thu, Apr 16, 2020 at 9:11 AM Sanne Grinovero <sa...@hibernate.org> wrote:
>>
>> I would agree with you all about the general sentiment against the use
>> of Optional, but there's one use case in which I think it might make
>> sense (although bear with me as I've never really used it much yet) :
>>
>> there's several methods on the standard Session and EntityManager in
>> Hibernate ORM to fetch a single entity: load/find/get/...
>>
>> Even after all these years, I always have to open the Javadoc to
>> remember which ones are making assumptions about the entity existence
>> in the database (so could return a proxy even if the object doesn't
>> actually existin the DB), and which ones are going to check first in
>> the DB, possibly returning null.
>>
>> Wouldn't Optional be great there to express the doubt vs the certainty
>> of it returning something?
>>
>> Similarly in xToOne associations, having to remember to set the
>> "optional" attribute, or having business code having to match the
>> mapping is not ideal. That's perhaps unrelated, as this second point
>> is more about how users should express mappings rather than how we
>> expose APIs, but I mean it as an example to not necessarily go to the
>> extreme of ignoring that it might have some use in some selected
>> cases.
>>
>> Thanks,
>> Sanne
>>
>> On Thu, 16 Apr 2020 at 11:44, Davide D'Alto <daltodav...@gmail.com> wrote:
>> >
>> > Hi,
>> > Gavin sent this PR: https://github.com/hibernate/hibernate-rx/pull/93
>> >
>> > It removes Optional from the API, for example:
>> >
>> > <T> CompletionStage<Optional<T>> fetch(T association);
>> >
>> > becomes:
>> >
>> > <T> CompletionStage<T> fetch(T association);
>> >
>> > Is there anybody here with strong opinions about keeping Optional in the
>> > API?
>> >
>> > Thanks,
>> > Davide
>> > _______________________________________________
>> > hibernate-dev mailing list
>> > hibernate-dev@lists.jboss.org
>> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> >
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to