JSF - Update no banco utilizando um objeto null

Boa noite pessoal.

Tenho um tela onde listo um conjunto de informações onde o usuário define os cardapios. Quando chamo o metodo set, devo alterar somente o cardapio, no entanto, podem haver situações em que o usuário não selecionou nenhum cardapio. Neste caso, não devo tomar nenhuma ação.

O problema, é que sempre é lançado um null pointer exception quando salvo os registros.

Alguem tem idéia de como solucionar o problema?

meu metodo set da classe DAO

    public boolean set(RelCardapioTensino rcce) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("UPDATE SIGAE.REL_CARDAPIO_TENSINO SET ID_CARDAPIO = ? WHERE ID_TIPO_CARDAPIO = ? AND ID_TIPO_ENSINO = ? AND ID_DATA = ? AND ID_PERIODO = ? AND ID_PERIODO_CARD = ? AND ID_CENSO_ESCOLAR = ?");
        ps.setInt(1, rcce.getCardapio().getIdCardapio());
        ps.setInt(2, rcce.getCardapio().getTipoCardapio().getIdTipoCardapio());
        ps.setInt(3, rcce.getTipoEnsino().getIdTipoEnsino());
        ps.setInt(4, rcce.getData().getIdData());
        ps.setInt(5, rcce.getPeriodoEscola().getIdPeriodo());
        ps.setInt(6, rcce.getPeriodoCardapio().getIdPeriodoCard());
        ps.setInt(7, rcce.getCenso().getIdCensoEscolar());
        int toReturn = ps.executeUpdate();
        ps.close();
        return toReturn > 0;
    }

meu metodo finish edit do Bean

    public String finishEditRelCardapioTensino () throws SQLException, ClassNotFoundException {
        int index = 0;
        for (index = 0; index < relCardapioTensino.size(); index++) {
            selectedRelCardapioTensino = relCardapioTensino.get(index);
            if (selectedRelCardapioTensino.getCardapio() == null) {
                //return null;
            }
            rceteDAO.set(selectedRelCardapioTensino);
            rceteDAO.addLog(selectedRelCardapioTensino);
        }
        // Limpa o cache
        relCardapioTensino = null;
        return "gotoEditRelCardapioTensino";
    }

Att:

José Luiz

o null pointer exception aponta sempre para a classe DAO, na propriedade

ps.setInt(1, rcce.getCardapio().getIdCardapio());

que deve realmente ser nula, ou a linha não deve ser submetida ao metodo set.

Primeiro testa se rcce.getCardapio() é null, se for coloca ps.setNull(1, Types.INTEGER) se não coloca o valor.
Caso o rcce.getCardapio().getIdCardapio() tambem possa ser null, faz a mesma verificação.

Valeu pela dica Jaziel!!!

Funcionou com o DAO assim:

    public boolean set(RelCardapioTensino rcce) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("UPDATE SIGAE.REL_CARDAPIO_TENSINO SET ID_CARDAPIO = ? WHERE ID_TIPO_CARDAPIO = ? AND ID_TIPO_ENSINO = ? AND ID_DATA = ? AND ID_PERIODO = ? AND ID_PERIODO_CARD = ? AND ID_CENSO_ESCOLAR = ?");
        if (rcce.getCardapio() == null) {
            ps.setNull(1, Types.INTEGER);
            ps.setInt(2, rcce.getTipoCardapio().getIdTipoCardapio());
            ps.setInt(3, rcce.getTipoEnsino().getIdTipoEnsino());
            ps.setInt(4, rcce.getData().getIdData());
            ps.setInt(5, rcce.getPeriodoEscola().getIdPeriodo());
            ps.setInt(6, rcce.getPeriodoCardapio().getIdPeriodoCard());
            ps.setInt(7, rcce.getCenso().getIdCensoEscolar());
            int toReturn = ps.executeUpdate();
            ps.close();
            return toReturn > 0;
        }
        ps.setInt(1, rcce.getCardapio().getIdCardapio());
        ps.setInt(2, rcce.getTipoCardapio().getIdTipoCardapio());
        ps.setInt(3, rcce.getTipoEnsino().getIdTipoEnsino());
        ps.setInt(4, rcce.getData().getIdData());
        ps.setInt(5, rcce.getPeriodoEscola().getIdPeriodo());
        ps.setInt(6, rcce.getPeriodoCardapio().getIdPeriodoCard());
        ps.setInt(7, rcce.getCenso().getIdCensoEscolar());
        int toReturn = ps.executeUpdate();
        ps.close();
        return toReturn > 0;
    }

e o bean ficou assim:

    public String finishEditRelCardapioTensino () throws SQLException, ClassNotFoundException {
        int index = 0;
        for (index = 0; index < relCardapioTensino.size(); index++) {
            selectedRelCardapioTensino = relCardapioTensino.get(index);
            rceteDAO.set(selectedRelCardapioTensino);
            //rceteDAO.addLog(selectedRelCardapioTensino);
        }
        // Limpa o cache
        relCardapioTensino = null;
        return "gotoEditRelCardapioTensino";
    }

Att:
José Luiz