Realizar Salvamento de Dados de uma JComboBox.

20/10/2011

8

Ola Pessoal.

Estou tendo problemas para salvar os dados na tabela mae.

Eis minhas Entidades:

Entidade de Usuarios:

@Entity
@SequenceGenerator(name = nome_seq, sequenceName = us_codigo, allocationSize = 1, initialValue = 1)
@Table(name=us_usuarios)
public class us_usuarios implements java.io.Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(generator=nome_seq)
    private Integer     us_codigo;
    
    @Column(length=50)
    private String      us_nome;
    
    @OneToOne(targetEntity=us_nivel.class,cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name=us_cod_nivel)
    private us_nivel    us_cod_nivel;


Entidade de Nivel de Usuarios :

@Entity
@Table(name=us_nivel)
public class us_nivel implements java.io.Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    private Integer     ni_codigo;
    
    @Column(length=50)
    private String      ni_descricao;




Agora vem a Pergunta:

No Formulario tenho uma JComboBox trazendo todos os Niveis de Usuarios. No momento de salvar os Dados do Usuario preciso que o hibernate pegue o conteudo desta JComboBox e me retorne o codigo de nivel do usuario, um relacionamento, pois preciso armazenar na tabela de Usuarios o codigo de nivel do mesmo.

Estou Salvando os Dados da seguinte Forma :
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        
        // Aqui seria o momento de passar o codigo do nivel.
        us_nivel nivel  = ??????;
        
        us_usuarios usuarios = new us_usuarios(); 
       
        usuarios.setUs_nome(usu_nome.getText());
        usuarios.setUs_cod_nivel(nivel);
        
        session.save(usuarios);


Amigos um forte abraco e obrigado a todos.
Responder

Posts

20/10/2011

Davi Costa

Não é o hibernate que vai pegar, vc que vai passar o nível selecionado na tela para o usuário.
Acredito que a sua pesquisa deve ser em cima de como pegar o nível selecionado na JComboBox. Depois é só passá-lo para o usuário quando for inserí-lo. Esse nível já vem do banco, não precisamos inserí-lo mais.

att Davi
Responder
Davi muito obrigado pela ajuda, mais seria possivel me dar uma dica de como fazer isso, estou tentando assim :

us_nivel nivel = (us_nivel) session.get(us_nivel.class, usu_cod_nivel.getSelectedIndex());

Mais ele me retorna o Index da combo ? e nao o valor da base de dados.
Responder

20/10/2011

Davi Costa

Vc vai ter que ver quais métodos disponíveis vc tem:

usu_cod_nivel

para esse objeto, deve ter alguma forma de vc recuperar o nivel inteiro, sem precisar ir no banco mais uma vez.. aredito q com uma pesquisa rápida vc consegue resolver seu problema.

att Davi
Responder
Existe algum exemplo disto ?
Responder
busque no site da sun tem uns exemplos de JComboBox.
Responder
A Solucao Encontrada foi a seguinte :

us_nivel nivel  = (us_nivel) session.createQuery(SELECT NIV FROM us_nivel NIV WHERE NIV.ni_descricao =:ni_descricao).setString(ni_descricao,usu_cod_nivel.getSelectedItem().toString()).uniqueResult();


Espero que eu possa ajudar alguem e se alguem tiver outra implementacao fico feliz, um abraco a todos.
Responder

20/10/2011

Davi Costa

Espero que me entenda, mas essa não é a solução ideal, vc em algum momento listou seu combo com esses itens vindos do banco e vai no banco de novo. Não é a melhor saída.

att Davi
Responder

20/10/2011

Davi Costa

Vc já tentou isso:
us_nivel nivel = (us_nivel)usu_cod_nivel.getSelectedItem();


Só não vai funcionar se seu JComboBox for só de String e não de do seu objeto us_nivel, o que também alteraria, a não ser que sua combo esteja em memória e em nehum momento vc tenha capturado os níveis do banco, o que tb estaria estranho.

att Davi
Responder
Na verdade Davi o que deseja e carregar a combo com valores em string ou seja somente a Descricao do nivel de usuario, agora se existe uma maneira de tambem carregar o codigo do nivel de maneira oculta sem que o usuario saiba eu implementaria esta opcao tambem, Obrigado.
Responder

21/10/2011

Davi Costa

Veja a documentação, vc pode criar não só uma combo de String e sim de objetos,
daí vc passaria já seu objeto completo vindo do banco. Daí com o método getSelectedItem() bastaria um cast para vc pegar seu objeto inteiro (sem ter que ir no banco de novo) e passaria o nível para o seu usuário. Simples simples.

documentação:
http://download.oracle.com/javase/6/docs/api/javax/swing/JComboBox.html
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JComboBox.html

outros links interessantes:
http://www.students.ic.unicamp.br/~ra079760/arquivos/curso_java/Curso%20de%20Java%20%E2%80%93%20Aula%205.pdf
http://www.javabeginner.com/java-swing/java-jcombobox-class-example/all/1
http://java.comsci.us/examples/swing/JComboBox.html

Att Davi
Responder

21/10/2011

Dyego Carmo

Opa !

Conseguiu resolver ?

Se sim... por favor feche o chamado :)

Valeu !
Responder
Ola Dyego estou seguindo as suas video aulas, fantasticas, mais gostaria de saber como faco pra dar um select na tabela e carregar em um combobox por exemplo, utilizando Hibernate, muito obrigado um forte abraco.
Responder
Dyego eu gostaria de falar com voce em particular, existe a possibilidade ? Por favor me responda um forte abraco.
Responder

25/10/2011

Dyego Carmo

Opa , manda uma MSG para mim no meu email... dyego.carmo@go-java.com

:)

Responder

13/01/2020

Maxwell Chaves

Davi muito obrigado pela ajuda, mais seria possivel me dar uma dica de como fazer isso, estou tentando assim :

us_nivel nivel = (us_nivel) session.get(us_nivel.class, usu_cod_nivel.getSelectedIndex());

Mais ele me retorna o Index da combo ? e nao o valor da base de dados.


Eu ainda não utilizo o Hibernate, mas você pode resolver da mesma forma que eu, é só adaptar:

Populo o jCombobox com uma lista carregada de objetos resultantes de uma consulta no momento em que a tela é inicializada. Depois que todos os campos estão preenchidos ao clicar no botão salvar ele aciona um evento que executa um método que percorre a lista através de um for e compara o item selecionado do jcombobox com cada objeto da lista e ao encontra seta o id (valor da base de dados) para o objeto que também já recebeu set de todos os demais campos, e em seguida os dados são persistidos para a base de dados.

Olhe o exemplo:
https://github.com/maxwelldeveloper7/TFD/blob/master/src/tfd/visao/FrmMotoristas.java
Responder