Nao consigo Salvar Relacionamento no Hibernate.

17/12/2011

0

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.
Ricardo Scarpim

Ricardo Scarpim

Responder

Posts

18/12/2011

Robson Teixeira

Olá rick é o seguinte quando você for persistir seu objeto do tipo EntUsUsuarios tenha o atributo usu_cod_nivel q é do tipo EntUsNivel preenchido. no caso do seu codigo postado seria assim.
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());

EntUsNivel nivelUsu=nivel.uniqueResult();//use esse metodo ou algum outro que retorne somente 1 objeto da consulta //executada
EntUsUsuarios usuarios = new EntUsUsuarios();

usuarios.setUsu_nome(txnome.getText());
usuarios.setUsu_login(txlogin.getText());
usuarios.setUsu_senha(txsenha.getText());
usuarios.setUsu_cod_nivel(nivelUsu); 

UsUsuariosDAO userDao = new UsUsuariosDAO();
userDao.InserirUsuario(usuarios);

ses.close();


espero ter ajudado.
att
robson
Responder

18/12/2011

Robson Teixeira

so completando.
não se preucupe com a historia de indice de chaveEstrangeira pois o hibernate cuida disso ok??
Responder

18/12/2011

Ricardo Scarpim

Robson Agradeco de mais a tua atencao e paciencia, mais ele fica dando erro na seguinte linha :
 usuarios.setUsu_cod_nivel(nivelUsu);


O Netbeans mostra a interrogacao dizendo:
Create Field nivelUsu in ...FCadUsuarios.

O que sera que estou fazendo de Errado, sera que esqueci alguma coisa na classe, um geter, ou um setter ?
Responder

18/12/2011

Ricardo Scarpim

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.
Responder

20/12/2011

Dyego Carmo

Voce pode colar o erro que está dando ao salvar ?
Responder

20/12/2011

Davi Costa

senão me engano tem uma opção em cima do chmado


att Davi
Responder

21/12/2011

Ricardo Scarpim

Amigos nao estava dando erro, e que na verdade nao salvava, implementei ate stored procedure para realizar o salvamento, la funcionou, peguei algumas video aulas aqui no site sobre postgre e consegui realizar o salvamento, mais mesmo com o hibernate eu consegui, agradeco de mais a todos, um forte abraco.
Responder

09/01/2012

Dyego Carmo

Muito bom !

Problema resolvido ? Poderia fechar o chamado ?

Obrigadao !!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar