Problemas com o Null Pointer Exception

Bom Dia!
Estou com problema aparentemente simples mas irritante vou passar os dados que acompanhamento.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.soeirosantos.siteadmin.infra.ConnectionFactory;
import br.com.soeirosantos.siteadmin.modelo.ItemMenu;

public class ItemMenuDao {
	public Long salvar(ItemMenu item_menu) {
		String sql = "insert into item_menu(caminho,codigo,menu_id,nome,ordem)values(?,?,?,?,?)";
		Connection connection = ConnectionFactory.getConnection();
		PreparedStatement preparedStatement = null;
		
		try {
			preparedStatement = connection.prepareStatement(sql);
			
			preparedStatement.setString(1, item_menu.getCaminho());
			preparedStatement.setString(2, item_menu.getCodigo());
			preparedStatement.setLong(3, item_menu.getMenu().getId());  //null pointer exception
			preparedStatement.setString(4, item_menu.getNome());
			preparedStatement.setInt(5, item_menu.getOrdem());

			preparedStatement.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		} finally {
			try {
				if (preparedStatement != null && !preparedStatement.isClosed()) {
					preparedStatement.close();
				}
				
				if (connection != null && !connection.isClosed()) {
					connection.close();
				}
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
		}
		
		//return id;
		return null;
	}
}
public class ItemMenu {
	private Long id;
	private String nome;
	private String codigo;
	private String caminho;
	private Integer ordem;
	private Menu menu;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getCaminho() {
		return caminho;
	}

	public void setCaminho(String caminho) {
		this.caminho = caminho;
	}

	public Integer getOrdem() {
		return ordem;
	}

	public void setOrdem(Integer ordem) {
		this.ordem = ordem;
	}

	public Menu getMenu() {
		return menu;
	}

	public void setMenu(Menu menu) {
		this.menu = menu;
	}
}
public class ItemMenu {
	private Long id;
	private String nome;
	private String codigo;
	private String caminho;
	private Integer ordem;
	private Menu menu;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getCaminho() {
		return caminho;
	}

	public void setCaminho(String caminho) {
		this.caminho = caminho;
	}

	public Integer getOrdem() {
		return ordem;
	}

	public void setOrdem(Integer ordem) {
		this.ordem = ordem;
	}

	public Menu getMenu() {
		return menu;
	}

	public void setMenu(Menu menu) {
		this.menu = menu;
	}
}

E por ultimo o main.

import java.util.Date;
import java.util.List;

import br.com.soeirosantos.siteadmin.modelo.ItemMenu;
import br.com.soeirosantos.siteadmin.modelo.Menu;
import br.com.soeirosantos.siteadmin.modelo.Pagina;
import br.com.soeirosantos.siteadmin.modelo.Site;

public class TesteDao {
	public static void main(String[] args) {
		PaginaDao dao = new PaginaDao();
		Pagina p = new Pagina();
		
		SiteDao siteDao = new SiteDao();
		Site s = new Site();
		s.setAtivo(true);
		s.setCodigo("codigo");
		s.setDataCriacao(new Date());
		s.setNome("Nome");
		s.setDescricao("descricao");
		s.setId(1L);
		siteDao.salvar(s);
		
		MenuDao menudao = new MenuDao(); 
		
		Menu m = new Menu();
		m.setCodigo("SalvarCodigo"); 
		m.setDataCriacao(new Date());
		m.setNome("SalvarNome"); 
		m.setSite(siteDao.buscarPorCodigo("codigo"));
		
		menudao.salvar(m);
		
		ItemMenu i = new ItemMenu();
		ItemMenuDao idao=new ItemMenuDao();
		
		i.setCaminho("caminho");
		i.setCodigo("codigo");
		//i.setMenu(menudao.buscarPorId(1L));
		i.setNome("nome");
		i.setOrdem(1);
		
		idao.salvar(i);
	}
}

Desde já muito obrigado!

O complicado é que o null pointer pode acontecer em qualquer parte do código. Tem algo, tipo um erro, que pode tá mostrando em qual linha a exceção está acontecendo?

Ola Lucas o da nesta linha

paredStatement.setLong(3, item_menu.getMenu().getId()); //null pointer exception

esta na class ItemMenuDao

Você consegue depurar o código para ver qual variável está nula? Nesse caso, podem estar nulas as variáveis paredStatement, item_menu ou item_menu.getMenu().

Verifique isso.

Reparei que está comentado a linha que carrega o menu na criação do item_menu:

//i.setMenu(menudao.buscarPorId(1L));

Provavelmente o método getMenu() está retornando null causando a exceção.

Acredito que o objeto Menu não está instanciado no objeto ItemMenu…
quando ele dá o getMenu().getId() estoura um NullPointer.
Sugestão:

mesmo tirando o comentário o erro ainda persiste

E o método buscarPorId que carrega o menu está retornando algo?

Retorna sim neste caso um id que neste caso vem do menu

Licon faz sentido vou fazer umas alterações aqui.

Mesmo com alterações persiste o Null Pointer

Mano é simples, basta você setar o id do menu no objeto que você estar instanciando.Segue o exemplo abaixo:

Abraço.

Seu erro esta aqui:
item_menu.getMenu().getId());

Faça assim:

item_menu.getMenu(1).getId());

Meu querido !!! NULL ele não esta mandando dados, portando esta sem GET não e questão de SET. Eu sei diferenciar, se retornar NULL não adianta os SETs estarem certos, ele tem que resolver os GETs e aonde ele esta coletando, não adianta ele dar GETs Long e SET DOUBLE.