Problema: Hibernate e Swing

4 respostas
mfcbentes

Boa tarde pessoal!

Eu to com problemas na inserção de dados de um formulário p/ um banco de dados.
Estou utilizando hibernate, e não consigo inserir um valor de uma outra tabela.

Esses são os POJOs

@Entity
@Table(name="tb_banco")
public class BancoBean implements Serializable{
    
    /** Declarações **/
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "bc_id", nullable=false)
    private Integer bcId;
    @Column(name = "bc_banco", length=50)
    private String bcBanco;
    @Column(name = "bc_agencia", length=4)
    private Integer bcAgencia;
    @Column(name = "bc_num_conta", length=5)
    private Integer bcNumConta;
    @OneToMany(mappedBy = "cxBanco")
    private Collection<TbCaixa> tbCaixaCollection;

    // getters and setters
@Entity
@Table(name="tb_plano_de_contas")
public class PlanoDeContasBean implements java.io.Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "pc_id")
    private Integer pcId;
    @Column(name = "pc_conta")
    private String pcConta;
    @Column(name = "pc_natureza")
    private String pcNatureza;
    @OneToMany(mappedBy = "cxPlanoDeContas")
    private Collection<TbCaixa> tbCaixaCollection;

    /** getters and setters */
@Entity
@Table(name="tb_caixa")
public class CaixaBean implements Serializable{
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cx_n_doc", nullable=false)
    private Integer cxNDoc;
    @Column(name = "cx_local")
    private String cxLocal;
    @Column(name = "cx_data")
    @Temporal(TemporalType.DATE)
    private Date cxData;
    @Column(name = "cx_tipo_lancamento")
    private String cxTipoLancamento;
    @Column(name = "cx_historico")
    private String cxHistorico;
    @Column(name = "cx_valor")
    private Double cxValor;
    @JoinColumn(name = "cx_banco", referencedColumnName = "bc_id")
    @ManyToOne
    private BancoBean cxBanco;
    @JoinColumn(name = "cx_plano_de_contas", referencedColumnName = "pc_id")
    @ManyToOne
    private PlanoDeContasBean cxPlanoDeContas;

    // getters and setters

Utilizo apenas uma classe com generics para a manipulação dos dados,

public class Control<C> implements ControlInterface{
    
    private C c;
    private final Session session;
    /** Creates a new instance of Control */
    public Control(C c) {
        this.session = HibernateUtil.getInstance().getSession();
        this.c = c;
    }

    public void salva() {
        try{
            session.save(c);
            session.getTransaction().commit();
        }catch (HibernateException he){
            
        }
    }

    public void altera() {
        try{
            session.update(c);
            session.getTransaction().commit();
        }catch (HibernateException he){
            
        }
    }

    public void exclui() {
        try{
            session.delete(c);
            session.getTransaction().commit();
        }catch (HibernateException he){
            
        }
    }

    public List<?> listaTudo() {
        Criteria criteria = session.createCriteria(c.getClass());
        List<?> list = criteria.list();
        session.beginTransaction().commit();
        
        return list;
    }
    
}

Ja consegui inserir dados pelos formulários nas entidades PlanoDeContasBean e BancoBean, mas na CaixaBean eu não consegui.
esse é o método salvar no formulário CaixaView:

private void salvaButtonActionPerformed(java.awt.event.ActionEvent evt) {
        CaixaBean caixa = new CaixaBean();
        Control control = new Control(caixa);
        
        List<PlanoDeContasBean> planos;
        
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        Date data;
        try {
            data = (Date) formatter.parse(txtData.getText());
            
            caixa.setCxLocal(txtLocal.getText().toUpperCase());
            caixa.setCxData(data);
            // corrigir isto
            caixa.setCxPlanoDeContas((PlanoDeContasBean) cbxPlano.getSelectedItem());
            caixa.setCxTipoLancamento(String.valueOf(cbxTipo.getSelectedItem()));
            caixa.setCxHistorico(txtHistorico.getText().toUpperCase());
            caixa.setCxBanco((BancoBean) cbxBanco.getSelectedItem());
            caixa.setCxValor(Double.parseDouble(txtValor.getText()));
            
            control.salva();
            
        } catch (ParseException ex) {
            ex.printStackTrace();
        }  
    }

Nas linhas onde eu seto o plano de contas e o banco dá um erro…
que não é possível converter String para PlanoDeContasBean ou BancoBean…
Alguém poderia me ajudar? Desde já agradeço!

4 Respostas

mfcbentes

alguém???

alexfe

Abre uma nova Sessione e utiliza o persist do hibernate

e posta o Erro do console
pra facilitar

mfcbentes

Alexafe,

Eu consegui resolver o problema,
agora só falta integrar ao Swing

ficou assim:

public class Main {
    public static void main(String[] args){
        Session session = HibernateUtil.getInstance().openSession();
        CaixaBean lanc = new CaixaBean();
        Control control = new Control(lanc);

        lanc.setCxData(new java.util.Date());
        lanc.setCxLocal("LOCAL 4");
        lanc.setCxPlanoDeContas((PlanoDeContasBean) session.get(PlanoDeContasBean.class, 2));
        lanc.setCxTipoDeLancamento("CRÉDITO");
        lanc.setCxHistorico("HISTÓRICO 4");
        lanc.setCxBanco((BancoBean) session.get(BancoBean.class, 1));
        lanc.setCxValor(700);

        control.salva();

    }
}
alexfe

A parte mais facil é integrar ao Swing

Criado 7 de fevereiro de 2011
Ultima resposta 21 de fev. de 2011
Respostas 4
Participantes 2