Chiariamo una cosa, in questo codice:
b.setPerfiKeyId(Long.valueOf(a.getMedico().getPersona().getId()));
Ciò che
potenzialmente può essere null (e causare il NPE) è:
- a
- il valore restituito da getMedico()
- il valore restituito da getPersona()
b non può essere null perché hai appena istanziato DomandaDenorm. Il getId() non so cosa ritorna di preciso ma presumo che venga scelto il valueOf(long l) a compilazione.
Pertanto se vuoi fare quel setPerfiKeyId in modo "safe", dovresti fare prima:
if (a != null && a.getMedico() != null && a.getMedico().getPersona() != null)
P.S. Long.parseLong("0") è del tutto inutile