It's the PK, not the Entity ;) In SimpleQueryInOutMapperBase, it could be
something like
@Inject
private QueryInvocationContext context;
protected abstract Object getPrimaryKey(Dto dto);
protected E findEntity(Object pk)
{
return (E) context.getEntityManager().find(context.getEntityClass(),
pk);
}
@Override
public Object mapParameter(final Object parameter)
{
Object pk = getPrimaryKey((Dto) parameter);
if (pk != null)
{
E entity = findEntity(pk);
return toEntity(entity, (Dto) parameter);
}
return toEntity(newEntity(), (Dto) parameter);
}
On Sat, May 17, 2014 at 1:57 PM, Romain Manni-Bucau
<[email protected]>wrote:
> would work while return is <E> and not Object ;)
>
>
> Romain Manni-Bucau
> Twitter: @rmannibucau
> Blog: http://rmannibucau.wordpress.com/
> LinkedIn: http://fr.linkedin.com/in/rmannibucau
> Github: https://github.com/rmannibucau
>
>
> 2014-05-17 11:47 GMT+02:00 Thomas Hug <[email protected]>:
> > Or a protected abstract Object getPrimaryKey(Dto dto). We can get the EM
> > over an injected QueryInvocationContext.
> >
> >
> > On Thu, May 15, 2014 at 9:06 PM, Romain Manni-Bucau
> > <[email protected]>wrote:
> >
> >> I think a protected findEntity(id) in the mapper can be enough.
> >>
> >>
> >> Romain Manni-Bucau
> >> Twitter: @rmannibucau
> >> Blog: http://rmannibucau.wordpress.com/
> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau
> >> Github: https://github.com/rmannibucau
> >>
> >>
> >> 2014-05-07 22:29 GMT+02:00 Thomas Hug <[email protected]>:
> >> > Hi Romain,
> >> > See your point. But if we only get the DTO - with what would we call
> the
> >> > find? Could even be that the PK is a DTO or encoded / encrypted and
> needs
> >> > to go through the mapper first. Maybe we can provide some convenience
> >> > methods in the base mapper?
> >> >
> >> >
> >> > On Tue, May 6, 2014 at 7:41 PM, Romain Manni-Bucau <
> >> [email protected]>wrote:
> >> >
> >> >> Hi guys,
> >> >>
> >> >> DTO feature is awesome but doesn't work in update mode since isNew
> >> >> doesn't use a managed entity.
> >> >>
> >> >> When using a mapper we should call find and pass it to the mapper (or
> >> >> create a new unmanaged entity if not found). So mapper signature
> >> >> should be Entity toEntity(Entity, DTO) no?
> >> >>
> >> >> Otherwise users need to do the find in the mapper...almost eveytime.
> >> >>
> >> >> wdyt?
> >> >>
> >> >>
> >> >> Romain Manni-Bucau
> >> >> Twitter: @rmannibucau
> >> >> Blog: http://rmannibucau.wordpress.com/
> >> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau
> >> >> Github: https://github.com/rmannibucau
> >> >>
> >>
>