Author Topic: Error al castear una entidad  (Read 2052 times)

haw01

  • Jr. Member
  • **
  • Posts: 82
  • Karma: 0
    • View Profile
Error al castear una entidad
« on: Octubre 07, 2014, 06:16:40 am »
Buen dia Chuidiang,tengo un problema de casteo me podrias orientar ´por favor?
mi problema es que quiero castear esto:
CatCalificacionEnt opc1 = (CatCalificacionEnt) ComboBox.getSelectedItem();
Mi entity es esta,pero no entiendo porque no la puedo guardar
ya que el metodo lo puedo recuperar de esta manera

Code: [Select]
CatCalificacion opc1 = (CatCalificacion) sypGComboBox.getSelectedItem();

if (opc1 != null && opc1.getCalificacion().equals("----"))
opc1 = null;
ent.setSypGlobal(opc1);


ent.setSypGlobal(opc1); este set recibe un objeto de tipo entidad CatCalificacion y la trato de recuperar de un jcombobox,pero como le hago?
me podrias orientar por favor hermano!! :( :(

Code: [Select]
@Entity
@Table(name = "CAT_CALIFICACIONES")
@NamedQueries({ @NamedQuery(name = "consultarCalificacionPorTipoySubtipo", query = "SELECT c FROM CatCalificacion c WHERE c.tipo=:tipo AND c.subTipo=:subTipo") })
public class CatCalificacion {

    @Column(name = "ID")
    @Id
    private Integer id;

    @Column(name = "CALIFICACION")
    private String calificacion;

    @Column(name = "TIPO")
    private String tipo;

    @Column(name = "SUBTIPO")
    private String subTipo;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCalificacion() {
        return calificacion;
    }

    public void setCalificacion(String calificacion) {
        this.calificacion = calificacion;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getSubtipo() {
        return subTipo;
    }

    public void setSubtipo(String subTipo) {
        this.subTipo = subTipo;
    }

    @Override
    public String toString() {
        return this.calificacion;
    }
}

de antemano agradezco tu ayuda con antipacion!!

saludos!!
Excelente tarde!

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Error al castear una entidad
« Reply #1 on: Octubre 07, 2014, 03:31:19 pm »
Hola:

Para que ComboBox.getSelectedItem() te devuelva un CatCalificacion, cuando le das los items al ComboBox deben ser de ese tipo. ¿Como estás añadiendo los items al combo?

Se bueno.

haw01

  • Jr. Member
  • **
  • Posts: 82
  • Karma: 0
    • View Profile
Re: Error al castear una entidad
« Reply #2 on: Octubre 08, 2014, 07:51:04 am »
Buenas Tardes otra vez!!

la manera de agregarle los items al JComboBox Es de esta manera:

Code: [Select]
List<CatCalificacionDTO> calificacionesDTO = calificacionService.obtenerCalificacionesPorTipoSubtipo(
TipoCalificacion.NACIONAL,
SubTipoCalificacion.VERUM);
calificacionesDTO = addFirstItem(calificacionesDTO);
cmbVEN.setModel(new DefaultComboBoxModel(calificacionesDTO.toArray()));


la exception que me marca es este stacktrace

Code: [Select]
java.lang.ClassCastException: com.profuturognp.asar.analiticos.dto.CatCalificacionDTO cannot be cast to com.profuturognp.asar.entity.CatCalificacion
at asar.analitics.vista.contraparte.ContraparteAdminJFrame.emptiCombo(ContraparteAdminJFrame.java:712)
at asar.analitics.vista.contraparte.ContraparteAdminJFrame.guardarCambios(ContraparteAdminJFrame.java:650)


el metodo emptiCombo
es este
Code: [Select]
   private CatCalificacion emptiCombo(JComboBox jc) {
        CatCalificacion ent = (CatCalificacion) jc.getSelectedItem();

        if (ent != null && ent.getId().intValue() == -1) {
            return null;
        }
        return ent;
    }



mi error este         CatCalificacion ent = (CatCalificacion) jc.getSelectedItem(); me dice que no la puedo castear osea porque estoy retornando un DTo y le paso un CatCalificacion de tipo Entity,pero como la puedo castear?estube buscando en internet pero no encuentro algo concreto ya intente al tratar de pasarle tambien el DTO de CatCalificacionDTO,pero me sigue marcando el error del cast,bueno por mi parte seguire buscando,si me pudieras orientar estaria genial!

de antemano gracias!!

Saludos!!

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Error al castear una entidad
« Reply #3 on: Octubre 08, 2014, 03:09:31 pm »
No puedes "castear" una clase cualquiera en otra clase cualquiera.

Cuando haces un new de una clase (por ejemplo, new clase A), en memoria tienes una clase A. Puedes guardar esa clase A en cualquier variable que sea de un tipo padre de clase A. Por ejemplo, si clase A hereda de B, B hereda de C y C hereda de Object (todas las clases heredan de Object), puedes hacer cualquiera de estas cosas

Code: [Select]
A a = new A();
B b = new A();
C c = new A();
Object d = new A();

Como en memoria realmente tienes una clase A, puedes "castear" cualquiera de esas variables a clase A o a cualquiera de las clases padre. Es válido

Code: [Select]
A var = (A)b;
A var = (A)c;
A var = (A)d;
B var2 = (B)c;
B var2 = (B)d;
C var3 = (C)d;

Si quieres "castear" de CatCalificacionDTO a CatCalificacion tienes que hacer que uno herede del otro, o bien meter el tipo bueno en el combo en vez de el otro.

Se bueno.

 

ey