JSF 2.0: selectOneMenu tiene el valor predeterminado 0 cuando está vacío

Para mi proyecto quiero implementar un cuadro combinado conh: selectOneMenu. Leí muchas publicaciones sobre cómo manejar el selectOneMenu correctamente y cómo implementar un convertidor personalizado. El cuadro combinado almacenará la ID Larg) de una tabla de base de datos diferente (denominada fk_ID) para la que existe una restricción. Hasta ahora todo parece funcionar según lo planeado. Ahora a mi problema:

La columna fk_ID es opcional, por lo que la primera opción en el cuadro combinado es unaf: selectItem sin ningún valor etiquetado "elegir ...". Cuando guardo el formulario y cambio el valor, todo está bien, excepto si lo vuelvo a configurar en "elegir ...". El error que obtengo es un violación de integridad de restricción.

ambién encontré el problema: el convertidor devuelvenul según lo previsto, pero el bean recibe elLong 0.

The XHTML:

<h:selectOneMenu value="#{userBean.selectedModel.fk_id}"
    id="combobox">
    <f:selectItem itemLabel="choose ..." />
    <f:selectItems
        value="#{userBean.items}"
        var="item"
        itemLabel="#{item.value}"
        itemValue="#{item.id}"
    />
    <f:converter converterId="userConverter" />
</h:selectOneMenu>

El convertidor personalizado:

@FacesConverter(value = "userConverter")
public class UserConverter implements Converter {
    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
        if (arg2 != null && !arg2.equals("null"))
            return Long.valueOf(arg2);

        return null;
    }
    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
        return String.valueOf(arg2);
    }
}

The bean (versión muy corta):

@Named(value = "userBean")
public class UserController implements Serializable {

    @Getter
    @Setter
    private UserModel selectedModel;

    @Getter
    @Setter
    private List<UserModel> items;

    public void saveModel() {
        selectedModel = userService.saveModel(selectedModel);
    }
}

l problema es que el fk_id esLong 0, pero debería sernul. Puedo resolver el problema escribiendo

if (selectedModel.getFk_id() == 0)
    selectedModel.setFk_id(null);

, pero esa no es una solución con la que me sienta cómodo.

Mi pregunta: ¿Por qué el valor esnul, que devuelve el convertidor, laLong 0 dentro desaveModel () método?

Respuestas a la pregunta(1)

Su respuesta a la pregunta