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

Gail Badner (JIRA) noreply at atlassian.com
Mon Dec 13 17:54:13 EST 2010


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5722?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gail Badner resolved HHH-5722.
------------------------------

      Assignee: Gail Badner
    Resolution: Rejected

b2BCustomerKey is transient, so Hibernate will not look for updates to that field.

> 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