Problemas com chave estrangeira [RESOLVIDO]

6 respostas
lokicat1

Bom pessoal,

Tenho uma tabela usuario que possui uma chave estrangeira que armazena o código do funcionario, mas não estou conseguindo criar um novo funcionario devido a FK ... será q alguem poderia me ajudar ... Obrigada!

public Usuario criarUsuario(ResultSet rs) {

        try {
            Usuario user = new Usuario();
            //aqui é onde eu tento criar o funcionario de codigo tal ... mas dá erro!!!
            user.getCodFuncionario().setCodigo(Integer.parseInt(rs.getString("cod_funcionario")));
            user.setLogin(rs.getString("login"));
            user.setSenha(rs.getString("senha"));
Erro!
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at dao.UsuarioDao.criarUsuario(UsuarioDao.java:99)
        at dao.UsuarioDao.selecionarUsuario(UsuarioDao.java:121)
        at view.manter.ManterUsuarios.<init>(ManterUsuarios.java:35)
        at view.TelaPrincipal.jMenuItemUsuariosActionPerformed(TelaPrincipal.java:367)
        at view.TelaPrincipal.access$600(TelaPrincipal.java:32)
        at view.TelaPrincipal$7.actionPerformed(TelaPrincipal.java:164)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261)
        at java.awt.Component.processMouseEvent(Component.java:6041)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5806)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2440)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

6 Respostas

rsakurai

Quando vc cria um objeto Usuario

Usuario user = new Usuario();

dentro desse construtor vc também cria um objeto CodFuncionario ?

porque se não estiver criando esse objeto, vc ganha um NullPointerException na linha:

user.getCodFuncionario().setCodigo(Integer.parseInt(rs.getString("cod_funcionario")));
lokicat1

Eu crio um codFuncionario, mas da tabela Usuario que é FK da tabela funcionario …
Acho q consegui intende o que me disse …
Mas não sei o que vou ter q fazer para resolver … vou ter q passar um funcionario completo ?

Vlw…
[]s

rsakurai

Se você precisar do Funcionario completo depois que salvar ele, então seria interessante vc consultar todas as informações dele.

Se vc apenas coloca o cod_funcionario para salvar ele então da forma que vc fez está certo.

Mas acho que para corrigir esse problema, vc tem que colocar um construtor na classe Usuario que seria +ou- assim:

public class Usuario {
  //Atributos

  public Usuario() {
    this.codFuncionario = new Funcionario(); //Aqui vc instancia o tipo do objeto codFuncionario.
  }
lokicat1

Mas eu não estou criando um novo funcionario, tenho q pegar o valor de um funcionario jah existente!
acho q não to conseguindo intender …

rsakurai

entendo, mas antes de vc poder atribuir os valores para seu codFuncionario ele precisa ser criado em algum momento, exemplo:

//Se o codFuncionario for null, ou seja, ainda não estiver criado.
user.codFuncionario = null;

// Se você tentar atribuir o valor para algum atributo, vc ganha um NullPointerException
user.getCodFuncionario().setCodigo(1);
lokicat1

Agora acho que consegui compreender …

MuitoO obrigada rsakurai…

Vc me ajudou bastante …

[]'s!

Criado 6 de novembro de 2008
Ultima resposta 6 de nov. de 2008
Respostas 6
Participantes 2