Menu

Herencia de entidades + Error

2009-08-11
2012-11-26
  • Henry de Sousa

    Henry de Sousa - 2009-08-11

    Hola Javier!

    Trataré de explicar el error con un ejemplo.

    Tengo una entidad llamada Directorio y tengo una entidad llamada Area la cual hereda de Directorio. La entidad Directorio está mapeada contra una tabla llamada directorio, y la entidad Area está mapeada contra una vista (Devuelve los registros de la tabla directorio donde el tipo sea una Aera). Hasta aquí todo bien.

    Tengo una tercera entidad en donde defino un campo de tipo Area, más o menos así

    @JoinColumn(name="DIRECTORIO")
    @ReferenceView("Simple") 
    @SearchKey 
    @ManyToOne(optional=false) 
    private Area area;

    Como ves, ese campo me permite seleccionar un Area de una lista de Areas haciendo click en el botón buscar. Aquí es en donde está el problema, cuando le doy click a la linternita para ver el listado de Areas, me salta un error que dice "Unknown column 'DTYPE' in 'where clause'"

    Este error me sale cuando la entidad Area hereda de Directorio, cuando Area NO hereda de Directorio, puedo hacer click en la linternita y ver perfectamente todas las Areas.

    Te dejo la traza completa por si sirve de ayuda.

    Saludos y gracias.

    La traza:
    ------------------------------------------------------------------------------------------------
    FINA: [JDBCTabProvider.nextBlock] Ejecutando SELECT directorio.ID, directorio.CODIGO, directorio.NOMBRE, directorio.NOMBRELARGO, directorio.NIT, directorio.RIF, directorio.TELEFONO, directorio.FAX, directorio.HTIPODIRECTORIO, directorio.HLOCALIDAD, directorio.DIRECCION, directorio.DOMICILIADO, directorio.WEBSITE, directorio.EMAIL, directorio.ZONAPOSTAL, directorio.STATUS, directorio.HRESPONSABLE, directorio.HCUENTABANCARIA, directorio.CIUDAD, directorio.TIPOPERSONA from directorio  where DTYPE='Area' con argumentos
    11-ago-2009 13:37:51 org.openxava.tab.impl.JDBCTabProvider nextChunk
    GRAVE: Fallo al ejecutar SELECT directorio.ID, directorio.CODIGO, directorio.NOMBRE, directorio.NOMBRELARGO, directorio.NIT, directorio.RIF, directorio.TELEFONO, directorio.FAX, directorio.HTIPODIRECTORIO, directorio.HLOCALIDAD, directorio.DIRECCION, directorio.DOMICILIADO, directorio.WEBSITE, directorio.EMAIL, directorio.ZONAPOSTAL, directorio.STATUS, directorio.HRESPONSABLE, directorio.HCUENTABANCARIA, directorio.CIUDAD, directorio.TIPOPERSONA from directorio  where DTYPE='Area'
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'DTYPE' in 'where clause'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1912)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
        at org.openxava.tab.impl.JDBCTabProvider.nextBlock(JDBCTabProvider.java:235)
        at org.openxava.tab.impl.JDBCTabProvider.nextChunk(JDBCTabProvider.java:258)
        at org.openxava.tab.impl.EntityTabDataProvider.nextChunk(EntityTabDataProvider.java:35)
        at org.openxava.tab.impl.EntityTab.nextChunk(EntityTab.java:298)
        at org.openxava.tab.impl.TableModelBean.getRow(TableModelBean.java:120)
        at org.openxava.tab.impl.TableModelBean.getValueAt(TableModelBean.java:171)
        at org.openxava.tab.impl.XTableModelDecoratorBase.getValueAt(XTableModelDecoratorBase.java:63)
        at org.openxava.tab.impl.HiddenXTableModel.getValueAt(HiddenXTableModel.java:70)
        at org.openxava.tab.Tab.createTableModel(Tab.java:271)
        at org.openxava.tab.Tab.getTableModel(Tab.java:250)
        at org.apache.jsp.xava.list_jsp._jspService(list_jsp.java:616)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:594)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:505)
        at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:965)
        at org.apache.jsp.xava.referenceSearch_jsp._jspService(referenceSearch_jsp.java:110)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
        at org.openxava.web.servlets.Servlets.getURIAsString(Servlets.java:120)
        at org.openxava.web.servlets.Servlets.getURIAsString(Servlets.java:99)
        at org.openxava.web.dwr.Module.getURIAsString(Module.java:175)
        at org.openxava.web.dwr.Module.fillResult(Module.java:184)
        at org.openxava.web.dwr.Module.request(Module.java:77)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        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:710)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Thread.java:619)
    11-ago-2009 13:37:51 org.openxava.tab.impl.EntityTabDataProvider nextChunk
    GRAVE: Fallo al ejecutar SELECT directorio.ID, directorio.CODIGO, directorio.NOMBRE, directorio.NOMBRELARGO, directorio.NIT, directorio.RIF, directorio.TELEFONO, directorio.FAX, directorio.HTIPODIRECTORIO, directorio.HLOCALIDAD, directorio.DIRECCION, directorio.DOMICILIADO, directorio.WEBSITE, directorio.EMAIL, directorio.ZONAPOSTAL, directorio.STATUS, directorio.HRESPONSABLE, directorio.HCUENTABANCARIA, directorio.CIUDAD, directorio.TIPOPERSONA from directorio  where DTYPE='Area'
    java.rmi.RemoteException: Fallo al ejecutar SELECT directorio.ID, directorio.CODIGO, directorio.NOMBRE, directorio.NOMBRELARGO, directorio.NIT, directorio.RIF, directorio.TELEFONO, directorio.FAX, directorio.HTIPODIRECTORIO, directorio.HLOCALIDAD, directorio.DIRECCION, directorio.DOMICILIADO, directorio.WEBSITE, directorio.EMAIL, directorio.ZONAPOSTAL, directorio.STATUS, directorio.HRESPONSABLE, directorio.HCUENTABANCARIA, directorio.CIUDAD, directorio.TIPOPERSONA from directorio  where DTYPE='Area'
        at org.openxava.tab.impl.JDBCTabProvider.nextChunk(JDBCTabProvider.java:279)
        at org.openxava.tab.impl.EntityTabDataProvider.nextChunk(EntityTabDataProvider.java:35)
        at org.openxava.tab.impl.EntityTab.nextChunk(EntityTab.java:298)
        at org.openxava.tab.impl.TableModelBean.getRow(TableModelBean.java:120)
        at org.openxava.tab.impl.TableModelBean.getValueAt(TableModelBean.java:171)
        at org.openxava.tab.impl.XTableModelDecoratorBase.getValueAt(XTableModelDecoratorBase.java:63)
        at org.openxava.tab.impl.HiddenXTableModel.getValueAt(HiddenXTableModel.java:70)
        at org.openxava.tab.Tab.createTableModel(Tab.java:271)
        at org.openxava.tab.Tab.getTableModel(Tab.java:250)
        at org.apache.jsp.xava.list_jsp._jspService(list_jsp.java:616)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:594)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:505)
        at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:965)
        at org.apache.jsp.xava.referenceSearch_jsp._jspService(referenceSearch_jsp.java:110)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
        at org.openxava.web.servlets.Servlets.getURIAsString(Servlets.java:120)
        at org.openxava.web.servlets.Servlets.getURIAsString(Servlets.java:99)
        at org.openxava.web.dwr.Module.getURIAsString(Module.java:175)
        at org.openxava.web.dwr.Module.fillResult(Module.java:184)
        at org.openxava.web.dwr.Module.request(Module.java:77)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        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:710)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Thread.java:619)
    11-ago-2009 13:37:51 org.openxava.tab.impl.JDBCTabProvider nextBlock

     
    • Javier Paniza

      Javier Paniza - 2009-08-12

      Hola Henry,

      > a entidad Directorio está mapeada contra una tabla llamada
      > directorio, y la entidad Area está mapeada contra una vista
      OpenXava solo soporta la estrategia de una tabla por jerarquía. Si tienes control sobre el esquema trata de mapear Directorio y Area sobre la misma tabla.

       
    • Henry de Sousa

      Henry de Sousa - 2009-08-12

      Hola Javier!

      He mapeado Directorio y Area sobre la misma tabla y obtengo el mismo error.

       
    • Henry de Sousa

      Henry de Sousa - 2009-08-12

      Hola Javier!

      Creé las siguientes clases de prueba, Persona y Doctor la cual hereda de Persona, al momento de ejecutar Doctor me da el error que te he comentado anteriormente.

      @Entity
      @Table(name="persona")
      public class Persona {

          @Id
          @Column(name="cedula")
          private Long cedula;
         
          @Column(name="nombre")
          private String nombre;

          public Long getCedula() {
              return cedula;
          }

          public void setCedula(Long cedula) {
              this.cedula = cedula;
          }

          public String getNombre() {
              return nombre;
          }

          public void setNombre(String nombre) {
              this.nombre = nombre;
          }
         
      }

      @Entity
      @Table(name="persona")
      public class Doctor extends Persona {

          @Column(name="profesion")
          private String profesion;

          public String getProfesion() {
              return profesion;
          }

          public void setProfesion(String profesion) {
              this.profesion = profesion;
          }
         
      }

       
      • Javier Paniza

        Javier Paniza - 2009-08-13

        Hola Henry,

        tus clases Doctor y Persona están bien. Así que el problema está en la tabla.
        ¿Has generado la tabla usando "updateSchema"?
        ¿Estás seguro de que la tabla tiene el campo discriminador?

         
    • Ana G.

      Ana G. - 2009-08-13

      Hola Javier!

      >>¿Has generado la tabla usando "updateSchema"?
      No, lo he hecho "a mano" directamente en la base de datos

      >>¿Estás seguro de que la tabla tiene el campo discriminador? 
      No lo tiene.

      Pues el problema era ese, que estaba creando la tabla directamente en la base de datos, he generado la tabla usando "updateSchema" y me ha generado el campo discriminador y listo, ahora si que funciona.

      Gracias Javier y saludos...

       
    • Henry de Sousa

      Henry de Sousa - 2009-08-13

      Lo siento he entrado en la pc de mi compañero y su sesión ya estaba abierta.

      >>¿Has generado la tabla usando "updateSchema"? 
      No, lo he hecho "a mano" directamente en la base de datos

      >>¿Estás seguro de que la tabla tiene el campo discriminador? 
      No lo tiene.

      Pues el problema era ese, que estaba creando la tabla directamente en la base de datos, he generado la tabla usando "updateSchema" y me ha generado el campo discriminador y listo, ahora si que funciona.

      Gracias Javier y saludos...

       

Log in to post a comment.