0 Replies Latest reply on Dec 15, 2011 4:36 PM by Luis Rincon

    inherante: loading Class master the instance is not type Class Child

    Luis Rincon Newbie
      Caused by: java.lang.ClassCastException: com.terasoft.ufps.sian.notas.persistencia.sistemaCalificacion.TipoCalificacion_$$_javassist_864 cannot be cast to com.terasoft.ufps.sian.notas.persistencia.sistemaCalificacion.CalificacionCualitativa
           at com.terasoft.ufps.sian.notas.action.CalificacionRubricaBean.getOpcionesCalificacion(CalificacionRubricaBean.java:466)

      this are classes of my project:

      Class master:

      @Entity
      @Table(name = "TIPO_CALIFICACION")
      @Inheritance(strategy=InheritanceType.JOINED)
      //@DiscriminatorColumn(name="TIPO", discriminatorType=DiscriminatorType.INTEGER)
      public class TipoCalificacion implements java.io.Serializable {

           private int id;
           private byte tipo;
           private String descripcion;
           private String nombre;
      }


      Class child:

      @Entity
      @Table(name = "CALIFICACION_CUALITATIVA")
      //@DiscriminatorValue("0")
      @PrimaryKeyJoinColumn(name="ID")
      public class CalificacionCualitativa extends TipoCalificacion implements java.io.Serializable {

           //private int id;
           //private TipoCalificacion tipoCalificacion;
           private Byte nroOpciones;
           private Set<OpcionCalCualitativa> opcionCalCualitativas = new HashSet<OpcionCalCualitativa>(
                     0);

      when i intented load the class TipoCalificacion throw of other object it should load
      the instance of type CalificacionCualitativa (polymorphism) inside the class TipoCalificacion. Show the code:

      @Entity
      @Table(name = "GRUPO_ACADEMICO")
      public class GrupoAcademico implements java.io.Serializable {

           private int id;
      .....
           private TipoCalificacion tipoCalificacion;
      .....
      .....

           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "TIPO_CALIFICACION_ID")
           public TipoCalificacion getTipoCalificacion() {
                return this.tipoCalificacion;
           }

           public void setTipoCalificacion(TipoCalificacion tipoCalificacion) {
                this.tipoCalificacion = tipoCalificacion;
           }
      }

      and its the code action bean:

      @Name("calificacionBean")
      @Scope(ScopeType.CONVERSATION)
      public class CalificacionRubricaBean {
      .....
      .....
      public void load(){
      ....
      TipoCalificacion tc = grupoAcademicoHome.getInstance().getTipoCalificacion();
      log.info("opciones de cal:"+tc);
      log.info("opciones de cal:"+(tc instanceof CalificacionCualitativa));
      log.info("opciones de cal:"+(tc instanceof TipoCalificacion));
      log.info("opciones de cal:"+tc.getClass().getCanonicalName());
      //CalificacionCualitativa cc = entityManager.find(CalificacionCualitativa.class, tc.getId());
      CalificacionCualitativa cc = (CalificacionCualitativa)tc; //here error
      ...
      }

      when i use the line code, the operation of load is actioned rigth:
      //CalificacionCualitativa cc = entityManager.find(CalificacionCualitativa.class, tc.getId());

      thanks to the person can help me...