Menu

Retrollamada no JPA con búsqueda de Entidad al Crear y Actualizar con XPersistence.getManager() dentro

gregorio
2024-07-14
2024-07-17
  • gregorio

    gregorio - 2024-07-14

    Saludos cordiales.
    XavaPro 6.6.1

    Con la anotación @PreCreate puedo hacer esto para cuando se persiste la entidad por primera vez:

    @PreCreate
        public void preCreate() {
    
                VendorPriceList vendorPriceList = VendorPriceList.findVendorPriceList(getProduct().getId(),getBusinessPartner().getId(), getDeliveryAdress().getId());
                setPurchasePrice(BigDecimal.ZERO);
    
                if(vendorPriceList != null) {
                    setPurchasePrice(vendorPriceList.getPurchasePrice());
                }
    
        }
    

    Pero necesito algo similar para actualizar: algún @Pre/PostUpdate no JPA.
    Entiendo que las retrollamadas propias de JPA no las puedo utilizar en éste caso.

    El valor que necesito guardar no se visualiza ni puede visualizarse en la vista, por lo que necesito recuperar ese dato tanto al crear la entidad y/o al actualizar si fuera el caso.

    No quisiera definir una acción personalizada para guardar la entidad porque sería únicamente para actualizar un dato de la entidad al momento de guardar y necesito tener consistencia y simplicidad debido a que son muchas entidades con el mismo requerimiento.

    Alguna idea?.
    Atte.

     
    • Chungyen Tsai

      Chungyen Tsai - 2024-07-16

      Hola Gregorio,

      No entendi bien, no te sirve @PreUpdate para lo que necesitas? no hace falta mostrar la propiedad en la vista para que se haga efecto PreUpdate.

      Saludos.

       
  • gregorio

    gregorio - 2024-07-17

    Hola Chungyen. Gracias por responder.
    Si le agrego @PreUpdate me arroja el error:

    Jul 16, 2024 8:19:38 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: This connection has been closed.
     error  FindVendorPriceList org.hibernate.exception.JDBCConnectionException: could not prepare statement
    false
    Jul 16, 2024 8:19:38 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    WARN: SQL Error: 0, SQLState: 08003
    Jul 16, 2024 8:19:38 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: This connection has been closed.
     error  FindVendorPriceList org.hibernate.exception.JDBCConnectionException: could not prepare statement
    

    que entiendo es debido a utilizar VendorPriceList vendorPriceList = VendorPriceList.findVendorPriceList(getProduct().getId(),getBusinessPartner().getId(), getDeliveryAdress().getId()); que tiene un getManager() dentro.

    Atte.

     
    • Chungyen Tsai

      Chungyen Tsai - 2024-07-17

      Hola Gregorio,

      En ese caso lo que se me ocurre es que en el @PreUpdate hagas un XPersistence.createManager(), crear una transacción y luego cerrar la transacción y el manager, es importante cerrarlos.

      Tenemos los dos métodos no JPA para antes de crear y antes de borrar, pero un PreUpdate no JPA, no tenemos. Ya que JPA en el manager no tiene un método para actualizar, así que no había donde sobreescribir el método.

      Saludos.

       

Log in to post a comment.