Menu

Fallo en valores calculados al cambiar referencia

2016-07-06
2018-04-27
  • Pedro Espadas

    Pedro Espadas - 2016-07-06

    Hola a todos. Espero podáis ayudarme.

    Estoy realizando el detalle para unas facturas, con articulo (entidad), cantidad, precioPorUnidad, iva, descuento, ivaTotal, descuentoTotal, base, baseDescuento y Total.

    El caso es que cuando cambio el articulo, el cual tiene un precio inicial, debe cambiar el precioPorUnidad y a raiz de este cambio el resto de valores, los cuales salvo iva y descuento (que son porcentajes) y cantidad, son valores calculados.

    Todo funciona correctamente cuando el detalle es nuevo, puedo cambiar el articulo sin errores, pero cuando cambio el articulo de un detalle que previamente fue grabado en la base de datos obtengo varios errores, que adjunto más abajo.

    En principio el cambio lo tiene que hacer basandose en un @DefaultValueCalculator de precioPorUnidad. He probado con @OnChange desde Articulo, pero no se como actualizar los valores calculados desde la acción.

    Pego a continuación el código y posteriormente la salida de la consola de error:

    @Entity
    @View(members="#articulo;"
    + "cantidad,precioPorUnidad;"
    + "base,descuento,descuentoTotal;"
    + "baseDesc,iva,ivaTotal;"
    + "total")
    @Tab(properties="articulo.nombre,cantidad,precioPorUnidad,descuento,iva,base,ivaTotal,total")
    public class DetalleFactura extends ControlableID{

    @ManyToOne(fetch=FetchType.LAZY, optional=true)
    @ReferenceView("Minimo")
    @Required
    

    // @OnChange(AlCambiarArticuloDetalleFactura.class)
    private Articulo articulo;

    @DefaultValueCalculator(UnoBigDecimalCalculator.class)
    @OnChange(AlCambiarCantidadServicioClienteAction.class)
    @Required
    @Digits(integer=10,fraction=1)
    private BigDecimal cantidad;
    
    @Transient
    private String _IVA = Gena3Preferencias.getIVA();
    
    @DefaultValueCalculator(
            value=PrecioPorUnidadCalculator.class, // Esta clase calcula el valor inicial
            properties=@PropertyValue(
                    name="codigoArticulo",.
                    from="articulo.codigo") 
            )
    //@Digits(integer=8,fraction=3)
    @Column(precision=8, scale=3)
    @Required
    private BigDecimal precioPorUnidad;
    
    @Digits(integer=3, fraction=0)  
    @Min(value=0)
    @DefaultValueCalculator(CeroBigDecimalCalculator.class)
    @OnChange(AlCambiarDescuentoDetalleFacturaAction.class)
    private BigDecimal descuento;
    
    @Digits(integer=3, fraction=0)
    @Min(value=0)
    @DefaultValueCalculator(IvaCalculator.class)
    @OnChange(AlCambiarIvaDetalleFacturaAction.class)
    private BigDecimal iva;
    
    /**************************************************************
     * SETTERS AND GETTERS
     *************************************************************/
    

    ...

    /*****************************************************
     * METODOS
     *****************************************************/
    @Depends("precioPorUnidad, cantidad") 
    @Column(precision=8, scale=3)
    public BigDecimal getBase(){
        if(getPrecioPorUnidad()==null)return BigDecimal.ZERO;
        return getCantidad().multiply(getPrecioPorUnidad());
    }
    
    @Depends("precioPorUnidad, cantidad,descuento") 
    @Column(precision=8, scale=3)
    public BigDecimal getBaseDesc(){
        if(getPrecioPorUnidad()==null)return BigDecimal.ZERO;
        return getCantidad().multiply(getPrecioPorUnidad()).multiply(getDescuentoPorcentaje());
    }
    
    @Depends("baseDesc, iva")
    @Column(precision=8, scale=3)
    public BigDecimal getIvaTotal(){
        if(getBaseDesc()==null)return BigDecimal.ZERO;
        return getBaseDesc().multiply(getIvaPorcentaje());
    }
    
    @Depends("base, descuento")
    @Column(precision=8, scale=3)
    public BigDecimal getDescuentoTotal(){
        if(getPrecioPorUnidad()==null)return BigDecimal.ZERO;
        if(getBase()==null)return BigDecimal.ZERO;
        return getBase().subtract(getBaseDesc());
    }
    
    private BigDecimal getIvaPorcentaje(){
        BigDecimal cien = new BigDecimal(100);
        if (getIva()==null || getIva().compareTo(cien)==1) return new BigDecimal(_IVA).divide(cien);
        return getIva().divide(cien);
    }
    
    private BigDecimal getDescuentoPorcentaje(){
        return BigDecimal.ONE.subtract(getDescuento().divide(new BigDecimal(100)));
    }
    
    @Stereotype("MONEY")
    @Depends("baseDesc, iva")
    public BigDecimal getTotal(){
        if(getBaseDesc()==null)return BigDecimal.ZERO;
        return getBaseDesc().add(getIvaTotal());
    }
    

    }

    GRAVE: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    javax.persistence.PersistenceException: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1338)
    at org.openxava.jpa.impl.EntityManagerDecorator.flush(EntityManagerDecorator.java:157)
    at org.openxava.model.impl.JPAPersistenceProvider.flush(JPAPersistenceProvider.java:97)
    at org.openxava.model.impl.JPAPersistenceProvider.find(JPAPersistenceProvider.java:26)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:92)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:63)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1576)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1720)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:219)
    at org.openxava.model.MapFacade.findEntity(MapFacade.java:634)
    at org.openxava.view.View.getPOJO(View.java:3216)
    at org.openxava.view.View.calculateValue(View.java:3161)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2944)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2909)
    at org.openxava.view.View.propertyChanged(View.java:2894)
    at org.openxava.view.View.assignValuesToWebView(View.java:2507)
    at org.openxava.view.View.assignValuesToWebView(View.java:2470)
    at org.apache.jsp.xava.execute_jsp._jspService(execute_jsp.java:190)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
    at org.openxava.web.servlets.Servlets.getURIAsStream(Servlets.java:66)
    at org.openxava.web.dwr.Module.getURIAsStream(Module.java:202)
    at org.openxava.web.dwr.Module.request(Module.java:61)
    at sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
    at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
    at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
    at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
    at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:80)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:192)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:152)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335)
    ... 73 more

    jul 06, 2016 7:33:44 PM org.openxava.view.View calculateValue
    ADVERTENCIA: ¡ADVERTENCIA! Imposible calcular valor para MetaProperty:DetalleFactura.view.descuentoTotal. Asumimos nulo
    javax.persistence.PersistenceException: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1338)
    at org.openxava.jpa.impl.EntityManagerDecorator.flush(EntityManagerDecorator.java:157)
    at org.openxava.model.impl.JPAPersistenceProvider.flush(JPAPersistenceProvider.java:97)
    at org.openxava.model.impl.JPAPersistenceProvider.find(JPAPersistenceProvider.java:26)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:92)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:63)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1576)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1720)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:219)
    at org.openxava.model.MapFacade.findEntity(MapFacade.java:634)
    at org.openxava.view.View.getPOJO(View.java:3216)
    at org.openxava.view.View.calculateValue(View.java:3161)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2944)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2909)
    at org.openxava.view.View.propertyChanged(View.java:2894)
    at org.openxava.view.View.assignValuesToWebView(View.java:2507)
    at org.openxava.view.View.assignValuesToWebView(View.java:2470)
    at org.apache.jsp.xava.execute_jsp._jspService(execute_jsp.java:190)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
    at org.openxava.web.servlets.Servlets.getURIAsStream(Servlets.java:66)
    at org.openxava.web.dwr.Module.getURIAsStream(Module.java:202)
    at org.openxava.web.dwr.Module.request(Module.java:61)
    at sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
    at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
    at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
    at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
    at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:80)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:192)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:152)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335)
    ... 73 more

    jul 06, 2016 7:33:44 PM org.openxava.model.impl.POJOPersistenceProviderBase find
    GRAVE: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    javax.persistence.PersistenceException: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1338)
    at org.openxava.jpa.impl.EntityManagerDecorator.flush(EntityManagerDecorator.java:157)
    at org.openxava.model.impl.JPAPersistenceProvider.flush(JPAPersistenceProvider.java:97)
    at org.openxava.model.impl.JPAPersistenceProvider.find(JPAPersistenceProvider.java:26)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:92)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:63)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1576)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1720)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:219)
    at org.openxava.model.MapFacade.findEntity(MapFacade.java:634)
    at org.openxava.view.View.getPOJO(View.java:3216)
    at org.openxava.view.View.calculateValue(View.java:3161)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2944)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2909)
    at org.openxava.view.View.propertyChanged(View.java:2894)
    at org.openxava.view.View.assignValuesToWebView(View.java:2507)
    at org.openxava.view.View.assignValuesToWebView(View.java:2470)
    at org.apache.jsp.xava.execute_jsp._jspService(execute_jsp.java:190)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
    at org.openxava.web.servlets.Servlets.getURIAsStream(Servlets.java:66)
    at org.openxava.web.dwr.Module.getURIAsStream(Module.java:202)
    at org.openxava.web.dwr.Module.request(Module.java:61)
    at sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
    at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
    at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
    at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
    at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:80)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:192)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:152)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335)
    ... 73 more

    jul 06, 2016 7:33:44 PM org.openxava.view.View calculateValue
    ADVERTENCIA: ¡ADVERTENCIA! Imposible calcular valor para MetaProperty:DetalleFactura.view.ivaTotal. Asumimos nulo
    javax.persistence.PersistenceException: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1338)
    at org.openxava.jpa.impl.EntityManagerDecorator.flush(EntityManagerDecorator.java:157)
    at org.openxava.model.impl.JPAPersistenceProvider.flush(JPAPersistenceProvider.java:97)
    at org.openxava.model.impl.JPAPersistenceProvider.find(JPAPersistenceProvider.java:26)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:92)
    at org.openxava.model.impl.POJOPersistenceProviderBase.find(POJOPersistenceProviderBase.java:63)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1576)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:1720)
    at org.openxava.model.impl.MapFacadeBean.findEntity(MapFacadeBean.java:219)
    at org.openxava.model.MapFacade.findEntity(MapFacade.java:634)
    at org.openxava.view.View.getPOJO(View.java:3216)
    at org.openxava.view.View.calculateValue(View.java:3161)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2940)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2906)
    at org.openxava.view.View.setValueNotifying(View.java:1132)
    at org.openxava.view.View.calculateValue(View.java:3182)
    at org.openxava.view.View.tryPropertyChanged(View.java:2944)
    at org.openxava.view.View.propertyChanged(View.java:2924)
    at org.openxava.view.View.propertyChanged(View.java:2909)
    at org.openxava.view.View.propertyChanged(View.java:2894)
    at org.openxava.view.View.assignValuesToWebView(View.java:2507)
    at org.openxava.view.View.assignValuesToWebView(View.java:2470)
    at org.apache.jsp.xava.execute_jsp._jspService(execute_jsp.java:190)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
    at org.openxava.web.servlets.Servlets.getURIAsStream(Servlets.java:66)
    at org.openxava.web.dwr.Module.getURIAsStream(Module.java:202)
    at org.openxava.web.dwr.Module.request(Module.java:61)
    at sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
    at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
    at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
    at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
    at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:80)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:192)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:152)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335)
    ... 73 more

    jul 06, 2016 7:33:44 PM org.openxava.controller.ModuleManager commit
    GRAVE: Error while committing the transaction
    javax.persistence.RollbackException: Error while committing the transaction
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)
    at org.openxava.jpa.XPersistence.commit(XPersistence.java:151)
    at org.openxava.controller.ModuleManager.doCommit(ModuleManager.java:828)
    at org.openxava.controller.ModuleManager.commit(ModuleManager.java:818)
    at org.openxava.web.dwr.Module.request(Module.java:119)
    at sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
    at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
    at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
    at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
    at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:82)
    ... 35 more
    Caused by: org.hibernate.HibernateException: identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:80)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:192)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:152)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
    ... 35 more

     
    • ivan.svi

      ivan.svi - 2018-04-25

      Hola,

      Estoy intentando incializar con cero un big decimal y vi que has definido la clase CeroBigDecimalCalculator.class

      La puedes detallar?

      muchas gracias, ivan

       
      • Javier Paniza

        Javier Paniza - 2018-04-27

        Hola Ivan:

        OpenXava incluye un ZeroBigDecimalCalculator. Míralo.

        ---------- 
        Ayuda a otros en este foro como yo te ayudo a ti.

         
  • Javier Paniza

    Javier Paniza - 2016-07-08

    Hola Pedro:

    identifier of an instance of org.navigo.gena3.modelo.Articulo was altered from 1 to 2

    Eso es porque has leido un Articulo y le has cambiado el id, eso no se puede hacer. Revisa el código de tus acciones, especialmente donde tengas articulo.setCodigo( ). Si no encuentras el problema pon aquí el código tus acciones al cambiar y le echaré un vistazo, en la entidad no he encontrado nada mal.


    Ayuda a otros en este foro como yo te ayudo a ti.

     
  • Pedro Espadas

    Pedro Espadas - 2016-07-08

    Hola, Javier, gracias por tu respuesta.

    Este es el código de Articulo:
    @Id
    @Column(length=5)
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int codigo;

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
    

    Lo curioso es que sólo pase cuando el detalle esta guardado en la base de datos, se lee el detalle y trato de cambiar el articulo, pero sólo falla en la view ya que al guardar todos los datos se guardan correctamente. He revisado las acciones y realmente lo único que hacen es que los valores no puedan ser nulos y cumplan unos limites y sólo afectan a la propiedad que cambia, la única accion que puede afectar sería AlCambiarCantidadServicioClienteAction y no se esta aplicando, la tengo comentada en el código fuente.

    Me ha pasado una cosa que no se a que se puede deber. Este problema me ocurre cuando creo un detalle directamente sin factura o albaran. Pero acabo de implementar la entidad albaran que tiene una colección de detalleFactura y dentro del albaran cuando creo un detalle, lo guardo en la base de datos y trato de cambiar el articulo, puedo hacerlo sin problema y no da ningún error, funciona correctamente. Es un comportamiento que me ha llamado la atención que haciendo exactamente lo mismo desde diferentes lugares en un caso dé error y en el otro no.

    Como realmente el detalleFactura lo quiero utilizar desde un albaran o una factura y desde ahí funciona correctamente no le voy a dar muchas vueltas que ya llevo más de una semana con ello.

    Muchas gracias por tu ayuda. Y si no lo había dicho antes, enhorabuena y gracias por openxava.

    Saludos. Pedro.

     

    Last edit: Pedro Espadas 2016-07-12

Log in to post a comment.