style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Solución Error al guardar Objeto a String cannot be cast to java.lang.String Hibernate Criteria

El ejemplo lo realice con el boton Guardar de un proyecto que estoy realizando. Hay momentos en que obtienes el famoso error de que un objeto no se puede castear a String. Aqui te muestro una solución de como debes de castear ese problema.

Boton Guardar

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try {
            this.iniciarOperacion();
            long maxid = (long) sesion.createCriteria(TransBanc.class)
                    .setProjection(Projections.max("idtransbanc"))
                    .uniqueResult();

            tbd = new TransBancDAO();

            listatransbanc = new ArrayList<>();
            long id = (maxid) + 1;
            String descripcion = txtDescripción.getText();
            Date fecha = dcFecha.getDate();
            sqldate = new java.sql.Date(fecha.getTime());
            Documentos documentos = (Documentos) cbxDocumento.getSelectedItem();
            CuentaBancaria cuentabancaria = (CuentaBancaria) cbxCuenta.getSelectedItem();
            Moneda moneda = (Moneda) cbxMoneda.getSelectedItem();
            double tasa = Double.parseDouble(txtTasa.getText());
            double neto = Double.parseDouble(txtNeto.getText());

            if (descripcion.trim().equals("")) {
                JOptionPane.showMessageDialog(this, "Ingrese la cuenta bancaria");
            } else {
                if (descripcion != null) {
                    TransBanc transbanc = new TransBanc();

                    String documento = String.valueOf((Documentos) cbxDocumento.getSelectedItem());

                    Documentos document = (Documentos) sesion.createCriteria(Documentos.class, "d")
                            .createAlias("d.debito_credito", "dc")
                            .add(Restrictions.eq("d.documento", documento))
                            .uniqueResult();

                    if (document.getDebito_credito().getDebito_credito().equals("Crédito")) {
                        transbanc.setCredito(Double.valueOf(neto));
                        transbanc.setDebito(0);
                    }
                    if (document.getDebito_credito().getDebito_credito().equals("Debito")) {
                        transbanc.setCredito(0);
                        transbanc.setDebito(Double.valueOf(neto));
                    }

                    transbanc.setIdtransbanc(id);
                    transbanc.setFecha(sqldate);
                    transbanc.setDescripción(descripcion);
                    transbanc.setDocumentos(documentos);
                    transbanc.setCuentabancaria(cuentabancaria);
                    transbanc.setMoneda(moneda);
                    transbanc.setTasa(Double.valueOf(tasa));
                    transbanc.setIdestado("S");

                    this.lblID.setText((String.valueOf(id)));
                    if (tbd.guardarTransBanc(transbanc) == true) {
                        listatransbanc.add(transbanc);
                        tblCtaBanc.removeAll();
                    }

                } else {
                    JOptionPane.showMessageDialog(null, "Complete la Descripción");
                }
                this.bloquearBotonesEdicion();
                this.bloquear();
                this.lblEstado.setText("Sin Aplicar");

                updateTabla();
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Seleccione una Cuenta Bancaria");
        }
    }

Si leen en el codigo que tengo mas arriba, al combobox cbxDocumento obtengo dos veces su valor, el primero porque necesito el objeto y el segundo porque necesito el String para evistar el problema del error de "cannot be cast to java.lang.String".

Forma correcta de castear un objeto a String

                    String documento = String.valueOf((Documentos) cbxDocumento.getSelectedItem());

Forma en el cual te producira el error que muestro en la imagen

                    Documentos documentos = (Documentos) cbxDocumento.getSelectedItem();
AdjuntoTamaño
error.jpg92.67 KB

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">