Hi Robin

Did you already look at the Query Delegates?
http://deltaspike.apache.org/documentation/data.html#Extensions

To summarize it for your context:
- You can define a new interface with the add method
- Provide an implementation of it which implements the new interface as
well as DelegateQueryHandler. You can access the entityManager over an
injected QueryInvocationContext (as in the docs).
- Have your repositories implement / extend the new interface
- Then ... No that's actually all, use the new add method :)

Hope this helps.

Cheers,
Thomas


On Thu, Nov 26, 2015 at 1:27 PM, Roos, Robin <[email protected]>
wrote:

> Of course, the method would be called add() and would return void....this
> is consistent with the notion that Repositories model a persistent
> Collection.
>
> @RequiresTransaction
> public void add(E entity) {
>     this.entityManager().persist(entity);
> }
>
> -----Original Message-----
> From: Roos, Robin [mailto:[email protected]]
> Sent: 26 November 2015 12:21
> To: [email protected]
> Subject: Extending EntityRepository interface and EntityRepositoryHandler
> class
>
> Hi Folks
>
> My developers are building a JPA application in which Domain objects
> remain entirely within the transactional context.  This means we never do
> detach/merge, whether implicitly or explicitly.
>
> I am concerned that the default Save() implementation in
> EntityRepositoryHandler would incur a merge() if an already-persistent
> instance was passed to save().
>
>
> @RequiresTransaction
> public E save(E entity) {
>     if(this.context.isNew(entity)) {
>         this.entityManager().persist(entity);
>         return entity;
>     } else {
>         return this.entityManager().merge(entity);
>     }
> }
>
> To preclude this I would like to extend EntityRepositoryHandler to provide
> an implementation of a new method add(), as follows:
>
> @RequiresTransaction
> public E save(E entity) {
>     this.entityManager().persist(entity);
>     return entity;
> }
>
> Presumably I would put this method signature into interface
> MyEntityRepository extends EntityRepository, and the implementation into
> class MyEntityRepositoryHandler extends EntityRepositoryHandler.
> Repository interfaces would then implement MyEntityRepository.  (We do not
> have any Repository "implementations" since DeltaSpike takes care of that
> for us.)
>
> But how do I get it all joined up, i.e.  how to I nominate my new Handler
> to be used when CDI is working its magic on the Repository interfaces?
>
> Thanks, Robin.
>
>
> ***********************************************************************************************************
> Nissan Motor Manufacturing (UK) Limited is a limited liability company
> registered in England and Wales under number 01806912 with its registered
> office at Washington Road, Sunderland, Tyne and Wear SR5 3NS.
>
> CONFIDENTIALITY NOTICE AND DISCLAIMER
>
> This message including any attachments to it (Message) is private and
> confidential and may contain proprietary or legally privileged
> information.  If you have received this Message in error, please send an
> email to [email protected] with a copy of this Message and
> remove it from your system. You must not, directly or indirectly, use,
> disclose, distribute, print or copy any part of this Message if you are not
> the intended recipient. The NISSAN EUROPE S.A.S group of companies (NISSAN)
> reserve the right to monitor all e-mail communications through its networks.
>
> NISSAN is not liable for the proper/complete transmission or any delay in
> the receipt of this Message .  Whilst NISSAN takes care to protect its
> systems from electronic virus attack or other harmful event, NISSAN gives
> no warranty that this Message is free of any virus or other harmful matter
> and accepts no liability for any loss or damage resulting from the
> recipient receiving, opening or using it.
>
> Any views or opinions expressed in this Message are those of the author
> and do not necessarily represent those of NISSAN.
>
> ***********************************************************************************************************
>
>
> ***********************************************************************************************************
> Nissan Motor Manufacturing (UK) Limited is a limited liability company
> registered in England and Wales under number 01806912 with its registered
> office at Washington Road, Sunderland, Tyne and Wear SR5 3NS.
>
> CONFIDENTIALITY NOTICE AND DISCLAIMER
>
> This message including any attachments to it (Message) is private and
> confidential and may contain proprietary or legally privileged
> information.  If you have received this Message in error, please send an
> email to [email protected] with a copy of this Message and
> remove it from your system. You must not, directly or indirectly, use,
> disclose, distribute, print or copy any part of this Message if you are not
> the intended recipient. The NISSAN EUROPE S.A.S group of companies (NISSAN)
> reserve the right to monitor all e-mail communications through its networks.
>
> NISSAN is not liable for the proper/complete transmission or any delay in
> the receipt of this Message .  Whilst NISSAN takes care to protect its
> systems from electronic virus attack or other harmful event, NISSAN gives
> no warranty that this Message is free of any virus or other harmful matter
> and accepts no liability for any loss or damage resulting from the
> recipient receiving, opening or using it.
>
> Any views or opinions expressed in this Message are those of the author
> and do not necessarily represent those of NISSAN.
>
> ***********************************************************************************************************
>
>

Reply via email to