Nao Sei como Salvar isso?

8 respostas
R

Pessoal Tenho duas Entidades :

A Entidade de EntUsUsuarios :

@Entity
@Table(name="usu_usuarios")
@SequenceGenerator(name = "nome_seq", sequenceName = "usu_codigo", allocationSize = 1, initialValue = 1)
public class EntUsUsuarios implements java.io.Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(generator="nome_seq")
    private Integer         usu_codigo;
    
    @Column
    private String          usu_nome;
    
    @Column
    private String          usu_login;
    
    @Column
    private String          usu_senha;
    
    @OneToOne
    @JoinColumn(name="usu_cod_nivel", nullable = true)
    private EntUsNivel      usu_cod_nivel;

E a Outra Entidade EntUsNivel

// Selecionar os Niveis pela Descricao do Nivel de Usuario.
@NamedQueries({
    
    @NamedQuery ( name   =   "EntUsNivel.DescNivel",     query  =   "from EntUsNivel nv where nv.niv_descricao = :descricao"),

    @NamedQuery ( name   =   "EntUsNivel.CarregaNivel",  query  =   "from EntUsNivel nv order by nv.niv_descricao")

})

@Entity
@Table(name="usu_nivel")
@SequenceGenerator(name = "nome_seq", sequenceName = "niv_codigo", allocationSize = 1, initialValue = 1)
public class EntUsNivel implements java.io.Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(generator="nome_seq")
    private Integer     niv_codigo;
    
    @Column(name= "niv_descricao")
    private String      niv_descricao;

Na hora de Salvar Tenho um Form e nele tenho uma JCombobox que tem os Dados Carregados da Entidade Usuarios Nivel.

A Duvida que nao me deixa dormir e a seguinte :

Na hora de Salvar como eu vou fazer pra pegar o Indice da Tabela de EntUsNivel e salvar na Tabela EntUsUsuarios ?

Estou Tentando Fazer algo do Tipo, mais nao ta Dando muito Certo nao :

try
        {
            
            // Testando para Verificar se a Sessao foi Aberta.
            Session ses = HibernateUtil.getInstance().getSession();
            
            // Pegar o Nivel de Usuarios.
            Query nivel = ses.getNamedQuery("EntUsNivel.DescNivel").setString("descricao", us_cod_nivel.getSelectedItem().toString());
           
            
            EntUsUsuarios usuarios  = new EntUsUsuarios();
            
            usuarios.setUsu_nome(txnome.getText());
            usuarios.setUsu_login(txlogin.getText());
            usuarios.setUsu_senha(txsenha.getText());
            //usuarios.setUsu_cod_nivel(); // E Aqui que preciso pegar o Indice da Tabela Estrangeira ????????
            
            UsUsuariosDAO userDao = new UsUsuariosDAO();
            userDao.InserirUsuario(usuarios);
             
            ses.close();

Pessoal To muito precisando de Ajuda, agradeco desde ja a Atencao e Ajuda de todos.

8 Respostas

jamirdeajr

Olá Rick1902,

Por se orientado a objetos você precisa setar a própria instância da Classe EntUsNivel, o hibernate vai se encarregar de ao inserir montar o comando SQL usando o ID dele,
ficaria assim:

R

Colega Curitibano, agradeco de mais a tua ajuda, mais eu sou iniciante no mundo Java e nao consegui entender nao, entou tentando fazer o que voce mandou ele me diz pra Criar um metodo na classe EntUsUsuarios ?
Pessoal agradeco novamente a ajuda de todos um forte abraco e estou no aguardo por mais informacoes e dicas.

Hebert_Coelho

Nesse post eu mostro como salvar o relacionamento: Hibernate 3 com JPA 2

Você não precisa salvar por query, basta utilizar o save do entityManager ou caso você esteja utilizando o Hibernate puro, use o método saveOrUpdate.

Ao buscar um objeto, todo o seu relacionamento já virá junto. Você não precisa criar um obj e jogar tudo manualmente.

R

Por incrivel que parece a duvida persiste, sou novato em java e hibernate e sempre fui acostumado a lidar com os indices atraves de stored procedures e pesquisas sql, sei que o hibernate e por objetos, por isso eu peco por gentileza a ajuda de voces para solucionar este problema, estou desenvolvendo uma aplicacao desktop e nao esta sendo facil, baixei video aulas, pesquisei no google mais to me batendo pra caramba, Delphi esta morto aqui nos Estados Unidos, outro dia fui a uma entrevista de emprego e me diceram Delphi is Dead ! Entao a mais ou menos 1 ano estou me aventurando no java, tenho pouco tempo, mais o tempo que tenho me dedico ao java, por isso peco a ajuda da comunidade pra entender de uma vez por todas uma coisa tao simples. Um abraco a todos e obrigado.

Hebert_Coelho

Eu sei como é… Já trabalhei com Delphi. Realmente Delphi está morrendo, por isso pulei fora.

O Java paga beeeem melhor do que Delphi viu. [=

R

Na verdade eles ate melhoraram esta versao do delphi ex2, mais vamos esperar para ver, se voce veio do Delphi vc deve ter se batido como eu estou me batendo agora, pois la tudo e componentes ne, e aqui e tudo no braco, voce ja viu algum tutorial comparando as maneiras de conexao com a base, etc.
Ainda estou me batendo mais tenho fe e perseveranca que vou consegui, aqui nos EUA por incrivel que pareca comunidade brasileira tem muita carencia de softwares, estou tentando migrar para o java pra poder utilizar em Ipad’s, iphone’s, linux e no que puder nao e facil mais maos a obra, um forte abraco agradeco a ajuda de todos, Ricardo.

jamirdeajr

Ola Rick1902,

Eu sei bem como é isso, eu sou das antigas e já trabalhei até com Borland Turbo Pascal, que é mais ou menos o Tataravô do Delphi!

Vamos por partes então:

Você disse que ele estava pedindo pra criar um método a classe EntUsUsuarios, quando colocou a linha
usuarios.setUsu_cod_nivel(us_cod_nivel);
Todos os atributos da entidade EntUsUsuarios tem um 'Getter' e um 'Setter' ? As entidades que irão ser usadas com Hibernate, JPA precisam ter. Se você usar a IDE Eclipse pode gerar 'automatico' clicando com o botão direito do mouse, e 'Source' / 'Generate Getters and Setters..' Exemplo para o atributo us_cod_nivel:
public EntUsNivel getUs_cod_nivel() {
		return us_cod_nivel;
	}

	public void setUs_cod_nivel(EntUsNivel us_cod_nivel) {
		this.us_cod_nivel = us_cod_nivel;
	}

Após resolver esse vamos ver o 'insert'.
Como muito bem explicou o jakefrog , você pode utilizar o save ou saveOrUpdate e não precisa usar comando SQL, mas, provavelmente esse método está sendo chamado dentro do método InserirUsuario da tua classe DAO.
Você poderia postar aqui o conteúdo desse método para que possamos ver?
Se der alguma exceção você também pode postar aqui que facilita, OK?

Boa sorte!

R

Colegas acho que consegui, gracas a preciosa ajuda de voces, meus amigos desenvolvedores !!!

try
        {
            
            // Testando para Verificar se a Sessao foi Aberta.
            Session ses = HibernateUtil.getInstance().getSession();
            
            // Instanciando o Nivel de Usuarios.
            EntUsNivel  nivelUsu = new EntUsNivel();
            
            // Verificar se Existe Algo na Combo.
            if(us_cod_nivel.getSelectedIndex()!=-1){
                
                // Pegar o Grupo de Usuarios.);
                Query nivel         = ses.getNamedQuery("EntUsNivel.DescNivel").setString("descricao", us_cod_nivel.getSelectedItem().toString());
                nivelUsu = (EntUsNivel) nivel.uniqueResult();
                System.out.println(nivelUsu.getNiv_codigo());//use esse metodo ou algum outro que retorne somente 1 objeto da consulta //executada
            }
            
            // Instanciando os Usuarios.
            EntUsUsuarios usuarios  = new EntUsUsuarios();
            
            // Repassando os Dados do Usuario.
            usuarios.setUsu_nome(txnome.getText());
            usuarios.setUsu_login(txlogin.getText());
            usuarios.setUsu_senha(txsenha.getText());
            usuarios.setUsu_cod_nivel(nivelUsu);           
           
            // Instanciando a Classe DAO de Usuarios.            
            UsUsuariosDAO userDao = new UsUsuariosDAO();
            userDao.InserirUsuario(usuarios);
            
            // Fechando a Sessao.
            ses.close();
             
            
        }catch(Exception Erro)
        {
            JOptionPane.showMessageDialog(null, "Erro ao Salvar os Dados Cadastrais : \n" + Erro);
        }

Vou continuar fazendo Testes, mais ate agora ja esta funcionando Tudo ok, agradeco de mais a ajuda de voces.

Pergunta como colocar Resolvido no Post ?

Um forte abraco a todos.

Criado 17 de dezembro de 2011
Ultima resposta 18 de dez. de 2011
Respostas 8
Participantes 3