[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5722) Method annotated with @PreUpdade is not called

Oleksandr Alesinskyy (JIRA) noreply at atlassian.com
Tue Dec 14 03:30:13 EST 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5722?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39359#action_39359 ] 

Oleksandr Alesinskyy commented on HHH-5722:
-------------------------------------------

That's true, but there were another changed fields (as is written in the ticket description "while updated fields are dutifully written into DB").
So it still unclear why preUpdate was not called.

Anyhow,you 100% correctly pointed out that this construction will not work if b2BCustomer will be the only updated field, so it cannot be used safely.

> Method annotated with @PreUpdade is not called
> ----------------------------------------------
>
>                 Key: HHH-5722
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5722
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: entity-manager
>    Affects Versions: 3.6.0
>         Environment: Java 1.6.0_21, Windows and Linux
>            Reporter: Oleksandr Alesinskyy
>            Assignee: Gail Badner
>
> I have a class with methods annotated  @PostLoad, @PrePersist, and @PreUpdate as below:
> {code:title=Snippet}
>     @Transient
>     private B2BCustomerKeyPo b2BCustomerKey;
>     @Embedded
>     @AttributeOverrides( { @AttributeOverride(name = "username", column = @Column(name = "APPLICATION_NAME")),
>             @AttributeOverride(name = "b2BCustomerName", column = @Column(name = "B2BCUSTOMER_NAME")) })
>     private UserKeyPo applicationKey;
>     ...
>     @SuppressWarnings("unused")
>     @PostLoad
>     private void postLoad() {
>         if (applicationKey != null) {
>             if (applicationKey.getB2BCustomerName() != null) {
>                 b2BCustomerKey = new B2BCustomerKeyPo(applicationKey.getB2BCustomerName());
>             }
>             if (applicationKey.getUsername() == null) applicationKey = null;
>         }
>     }
>     @SuppressWarnings("unused")
>     @PrePersist
>     private void prePersist() {
>         if (b2BCustomerKey != null) {
>             if (applicationKey != null) {
>                 if (!b2BCustomerKey.equals(new B2BCustomerKeyPo(applicationKey.getB2BCustomerName()))) {
>                     final String msg =
>                             String
>                                     .format(
>                                             "B2B customer [%s] of the product does not match the Application of the product [%s/%s]",
>                                             b2BCustomerKey.getName(), applicationKey.getB2BCustomerName(),
>                                             applicationKey.getUsername());
>                     throw new IllegalStateException(msg);
>                 }
>             } else {
>                 applicationKey = new UserKeyPo(b2BCustomerKey.getName(), null);
>             }
>         }
>     }
>     @SuppressWarnings("unused")
>     @PreUpdate
>     private void preUpdate() {
>         throw new RuntimeException("§TEST§");
>     }
> {code}
> prePersist and postLoad methods work as expected but preUpdate method is not called at all - while updated fields are dutifully written into DB (they never would if preUopdate will be called).
> The code manipulating the object is as below:
> {code:title=Snippet2}
>         ProductPo productPoOld = readProductPo(input.getProduct().getProductKey().getExternalProductKey());
>         ...
>         B2BCustomerKey b2bCustomerKey = productNew.getB2BCustomerKey();
>         productPoOld.setB2BCustomerKey(mappingHelper.mapObject(productNew.getB2BCustomerKey(),
>                  B2BCustomerKeyPo.class));
>         LOG.debug(productPoOld.getB2BCustomerKey());
>         // @PreUpdate method is not called regardless if flush is present below or not
>         productDao.flush();
> {code}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       



More information about the hibernate-issues mailing list