Olá a todos,
Estou com o seguinte probema, tenho um form onde existe um jbombobox que é preenchido com uma lista de objetos carregados via hibernate, veja o método que criei para isto:
public void PreencheEstagio(){
this.sessao = this.factory.openSession();
List lista_estagio = this.sessao.createQuery("from syslagg.beans.Estagio").list();
for(Object o : lista_estagio){
Estagio estagio_combo = (Estagio) o;
fieldEstagio.addItem(estagio_combo.getNome());
}
this.factory.close();
}
Até ai tudo bem o meu campo é preenchido normalmente, o problema que tenho é na hora de salvar o dado na base de dados, preciso pegar o objeto que é selecionado pelo usuário, para o relaciomamento do hibernate funcionar, ou seja, preciso passar o objeto para o insert funcionar.
Alguém tem alguma sugestão.
Valeu,
Paulo
Use o método getSelectedItem().
seuCombo.getSelectedItem()
A Paz!!
poste aqui para a comunidade!
Vejam,
aluno.setEstagio((Estagio) fieldEstagio.getSelectedItem());
Note que fiz um casting para poder rodar, se naum da erro, e na hora q mando gravar os dados aparecem estes erros:
Exception occurred during event dispatching:
java.lang.ClassCastException: java.lang.String
at syslagg.jfrmAcademico.btnGravaActionPerformed(jfrmAcademico.java:715)
at syslagg.jfrmAcademico.access$3300(jfrmAcademico.java:20)
at syslagg.jfrmAcademico$26.actionPerformed(jfrmAcademico.java:546)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:153)
at java.awt.Dialog$1.run(Dialog.java:515)
at java.awt.Dialog.show(Dialog.java:536)
at java.awt.Component.show(Component.java:1300)
at java.awt.Component.setVisible(Component.java:1253)
at syslagg.jfrmPrincipal.btnAcademicoActionPerformed(jfrmPrincipal.java:249)
at syslagg.jfrmPrincipal.access$000(jfrmPrincipal.java:15)
at syslagg.jfrmPrincipal$1.actionPerformed(jfrmPrincipal.java:124)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Tem mais alguma possivel solução.
Valeu,
Paulo
Pelo que vc colocou aqui:
Vc está adicionando uma Sring no Combo(fieldEstagio) e não um objeto Estagio.
Faça o seguinte, sobrescreva o toString() na sua classe estágio e adicione ela no Combo(fieldEstagio).
A Paz!!
Paulo,
Não entendi o q vc me falou, tem como me dar mais alguma dica, veja a minha classe Estagio
/**
* Classe Estagio
* Está classe é um bean que contém todos os tipo de estágio em que um aluno
* pode estar participando
**/
package syslagg.beans;
import java.io.Serializable;
import java.util.Collection;
import java.util.Set;
import javax.persistence.*;
@Entity(access=AccessType.FIELD)
@Table(name="Estagio")
@SequenceGenerator(name="SEQ_ESTAGIO", sequenceName="SEQ_ESTAGIO")
public class Estagio implements Serializable {
@Id(generate=GeneratorType.SEQUENCE, generator="SEQ_ESTAGIO")
private int id_estagio;
@Column(name="nome", nullable=false, length=50)
private String nome;
@Column(name="descricao", nullable=false, length=255)
private String descricao;
/**
* Criando um relacionamento entre as
* classes Estagio e Aluno
**/
@OneToMany(mappedBy="estagio")
private Set<Aluno> alunos;
public void setId (int id){
this.id_estagio = id;
}
public int getId(){
return this.id_estagio;
}
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return this.nome;
}
public void setDescricao(String descricao){
this.descricao = descricao;
}
public String getDescricao(){
return this.descricao;
}
}
Paulo
Adicione o seguinte método a sua classe:
public String toString(){
return nome;
}
Então a partir disso ao invés de adicionar o nome do Estágio no Combo vc adiciona logo o objeto estágio. Daí o Combo vai chamar seu método sobrescrito(toString()) para ser mostrado.
Então seu código de inserção no Combo irá ficar assim:
public void PreencheEstagio(){
this.sessao = this.factory.openSession();
List lista_estagio = this.sessao.createQuery("from syslagg.beans.Estagio").list();
for(Object o : lista_estagio){
fieldEstagio.addItem(o);
}
this.factory.close();
}
A Paz!!