Valor por defecto

ivan.svi
2013-01-03
2013-01-11
  • ivan.svi
    ivan.svi
    2013-01-03

    Hola,

    Estoy programando que cuando se elije un producto de una entidad "Producto" el atributo "Cantidad" se calcule con un join de tablas en vez de ingresarlo por teclado.

    El join de tablas lo hice y se llama CalcularStock.
    Lo implemente con @DefaultValueCalculator pero no funciona porque esa anotacion la calcula cuando presiono el boton de "Nuevo".
    Me fije en la web y hay una anotacion @PrePersist pero no la encuentro en los packages.
    Me podrian indicar que anotacion me conviene usar para que el el valor aparezca por defecto cunado elijo un producto?
    muchas gracias, Ivan

     
  • ivan.svi
    ivan.svi
    2013-01-09

    Hola Javier,
    Ambas propiedades me han servido mucho porque utilice dos propiedades formula para cantidadProducida y cantidadEntregada.
    Despues hice una propiedad calculada para la resta entre esta dos llamada Cantidad y funciona.
    Quise poner la propiedad Formula en cantidad pero como cantidadEntregada y cantidadProducida no se crean en la tabla, no funciona.
    Ahora me lo calcula bien "Cantidad" en la pantalla pero en la tabla siempre esta en blanco. me gustaria saber como lo puedo modificar para probar hacer dos cosas:
    1) que me aparezca en la pantalla (como ahora) y me lo cargue bien en la tabla
    2) que me aparezca en la pantalla (como ahora) y no me aparezca la columna "Cantidad" en la tabla
    Calculo que son solo modificaciones en el etributo "Cantidad"
    Abajo te expongo lo que hice

    @Hidden
    @org.hibernate.annotations.Formula("(select sum(prodd.cantidad) ....")
    public BigDecimal cantidadProducida;

    public BigDecimal getCantidadProducida() {
    return cantidadProducida;
    }

    @Hidden
    @org.hibernate.annotations.Formula("(select sum(entrd.cantidad)...)
    public BigDecimal cantidadEntregada;

    public BigDecimal getCantidadEntregada() {
    return cantidadEntregada;
    }

    public BigDecimal cantidad;

    @Depends("cantidadProducida,cantidadEntregada")
    public BigDecimal getCantidad() {
    if(cantidadProducida == null)
    cantidadProducida=BigDecimal.ZERO;
    if(cantidadEntregada == null)
    cantidadEntregada=BigDecimal.ZERO;
    return cantidadProducida.subtract(cantidadEntregada);
    }

    public void setCantidad(BigDecimal cantidad) {
    this.cantidad = cantidad;
    }

    muchas gracias, Ivan

     
  • Javier Paniza
    Javier Paniza
    2013-01-11

    Hola Ivan,

    1) que me aparezca en la pantalla (como ahora) y me lo cargue bien en la tabla

    Si quieres que la propiedad se guarde en la table, pero también se calcule en pantalla deberías crear una propieda persistente y una calculada y mover la primera a la segunda en un método @PreCreate @PreUpdate. Hay un ejemplo de esto en las sección 8.2.2 del libro

    2) que me aparezca en la pantalla (como ahora) y no me aparezca la columna

    Usa una propiedad calculadas. Las propiedades calculadas no se graban en la tabla.

    Cuando dices tabla asumo que es la tabla de la base de datos, no la lista.


    Ayuda a otros en este foro como yo te ayudo a ti.
    Antes de poner una pregunta busca en este mismo foro la respuesta
    y lee la documentación de OpenXava en openxava.org.

     
    Last edit: Javier Paniza 2013-01-11