Re: [hibernate-dev] JPA Events

2018-03-19 Thread Petar Tahchiev
Hi Steve,

thank you for your reply. I really appreciate it. Here's my situation: my
client asked me to get the dirty Products. Now the Product has a
List manufacturers so to me it is obvious that when the
manufacturers are changed then the Product is dirty, and this is exactly
what I try to achieve.
Unfortunately I can't do this - neither with JPA, nor with Hibernate
directly.

- JPA has only @PreUpdate and @PrePersist which are not invoked if the
List manufacturers are changed.

- Hibernate however has several more listeners
(PreCollectionUpdateEventListener, PreCollectionRemoveEventListener,
PreCollectionRecreateEventListener). So I created my own EventListeners and
implement those interfaces. Now when the Collection is modified, I
set the Product.isDirty flag to TRUE and try to save the Product.
Unfortunately the moment I do that then another PreCollectionUpdate is
fired so I get a StackOverflow error. I was thinking to update the product
directly with JDBC and bypass Hibernate, but unfortunately my client has
requested the solution to be database agnostic and so using plain JDBC will
bring me a lot of troubles.

I can, however, implement my requirements with EclipseLink, as noted in
this comment:

https://github.com/javaee/jpa-spec/issues/167#issuecomment-374254412

But I really like Hibernate and I don't want to migrate all my code to
EclipseLink :(

What does the rest of the Hibernate team think? I know it's a matter of
interpretation of the spec, but is it really going to be a big change if
PreUpdate events were fired when a List or a Map
attributes are changed?


2018-03-19 17:32 GMT+02:00 Steve Ebersole :

> It is actually very unclear.  Look at the wording... "...update
> operations to *entity* data...".  So clearly it boils down to your
> definition of "entity data" and what is being updated, as Oliver mentions
> as well.  We take the interpretation that since we are not updating the
> entity table here, we do not fire the event (unless the entity is
> versioned, in which case the change in the collection would cause a version
> increment and the entity table to be updated as well).
>
> In Hibernate, this would translate to a collection event - but of course
> JPA has no such notion.  And the distinction is actually quite important
> for supporting things like Envers, so it would need to be a VERY compelling
> reason to change this behavior in Hibernate.
>
> On Mon, Mar 19, 2018 at 9:55 AM Petar Tahchiev 
> wrote:
>
>> Hi guys,
>>
>> I opened an issue in the JPA spec here yesterday:
>>
>> https://github.com/javaee/jpa-spec/issues/167
>>
>> because @PreUpdate and @PrePersist events are not fired when I save a
>> collection on the owner. Since then, a discussion with Oliver Gierke from
>> the SpringDATA team started and I wanted to know your opinion on this.
>>
>> Basically the question is: if you have Product with a Collection
>> attribute and you update the collection, shall @PreUpdate event be fired.
>>
>> As Oliver mentioned the JPA spec says:
>> ---
>> The PreUpdate and PostUpdate callbacks occur before and after the database
>> update operations to entity data respectively.
>> ---
>>
>> so to me it is obvious that when an attribute of the Product is changed
>> then this means that @PreUpdate event for the Product must be fired.
>>
>> What do you think? Should I open a bug in Hibernate?
>>
>> --
>> Regards, Petar!
>> Karlovo, Bulgaria.
>> ---
>> Public PGP Key at:
>> http://pgp.mit.edu:11371/pks/lookup?op=get=0x19658550C3110611
>> Key Fingerprint: A369 A7EE 61BC 93A3 CDFF  55A5 1965 8550 C311 0611
>> ___
>> hibernate-dev mailing list
>> hibernate-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>
>


-- 
Regards, Petar!
Karlovo, Bulgaria.
---
Public PGP Key at:
http://pgp.mit.edu:11371/pks/lookup?op=get=0x19658550C3110611
Key Fingerprint: A369 A7EE 61BC 93A3 CDFF  55A5 1965 8550 C311 0611
___
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev


Re: [hibernate-dev] JPA Events

2018-03-19 Thread Steve Ebersole
It is actually very unclear.  Look at the wording... "...update operations
to *entity* data...".  So clearly it boils down to your definition of
"entity data" and what is being updated, as Oliver mentions as well.  We
take the interpretation that since we are not updating the entity table
here, we do not fire the event (unless the entity is versioned, in which
case the change in the collection would cause a version increment and the
entity table to be updated as well).

In Hibernate, this would translate to a collection event - but of course
JPA has no such notion.  And the distinction is actually quite important
for supporting things like Envers, so it would need to be a VERY compelling
reason to change this behavior in Hibernate.

On Mon, Mar 19, 2018 at 9:55 AM Petar Tahchiev 
wrote:

> Hi guys,
>
> I opened an issue in the JPA spec here yesterday:
>
> https://github.com/javaee/jpa-spec/issues/167
>
> because @PreUpdate and @PrePersist events are not fired when I save a
> collection on the owner. Since then, a discussion with Oliver Gierke from
> the SpringDATA team started and I wanted to know your opinion on this.
>
> Basically the question is: if you have Product with a Collection
> attribute and you update the collection, shall @PreUpdate event be fired.
>
> As Oliver mentioned the JPA spec says:
> ---
> The PreUpdate and PostUpdate callbacks occur before and after the database
> update operations to entity data respectively.
> ---
>
> so to me it is obvious that when an attribute of the Product is changed
> then this means that @PreUpdate event for the Product must be fired.
>
> What do you think? Should I open a bug in Hibernate?
>
> --
> Regards, Petar!
> Karlovo, Bulgaria.
> ---
> Public PGP Key at:
> http://pgp.mit.edu:11371/pks/lookup?op=get=0x19658550C3110611
> Key Fingerprint: A369 A7EE 61BC 93A3 CDFF  55A5 1965 8550 C311 0611
> ___
> 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