Newsgroup: it.comp.java
Titolo: controllare se un object è null

Salve a tutti
Ho questo metodo in un progetto JSP...
----------------------------------------------------------------------
public List<Prescrizione> getPrescrizioni() {
	Session session = HibernateUtils.getSessionFactory().getCurrentSession();
	session.beginTransaction();
	session.refresh(visita);
	session.merge(visita);
	for (Prescrizione p : visita.getPrescrizioni())
		p.getId();
	session.getTransaction().commit();
	//
	prescrizioni = visita.getPrescrizioni();
	return prescrizioni;
}
----------------------------------------------------------------------
...che però mi scaturiva un errore nel session.merge(visita) perchè 
visita era null...
L'errore è questo:
exception
javax.servlet.ServletException: /gestcaso.jsp(259,11) 
'#{visitaBean.prescrizioni}' Error reading 'prescrizioni' on type 
it.umbria.ausl2.gestvisite.bean.VisitaBean
root cause
org.apache.jasper.el.JspELException: /gestcaso.jsp(259,11) 
'#{visitaBean.prescrizioni}' Error reading 'prescrizioni' on type 
it.umbria.ausl2.gestvisite.bean.VisitaBean
org.hibernate.AssertionFailure: null identifier
visita è un istanza della classe Visita...
per risolvere ho pensato di modificare il metodo come segue...
----------------------------------------------------------------------
public List<Prescrizione> getPrescrizioni() {
	prescrizioni = new ArrayList<Prescrizione>();
	if (visita != null) {
		Session session = HibernateUtils.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.refresh(visita);
		session.merge(visita);
		for (Prescrizione p : visita.getPrescrizioni())
			p.getId();
		session.getTransaction().commit();
		//
		prescrizioni=visita.getPrescrizioni();
	}
 
	return prescrizioni;
}
----------------------------------------------------------------------
...ma, pur essendo visita == null (o almeno da debug mi sembra di capire 
questo) arriva comunque al merge e scaturisce comunque l'errore.
Il mio dubbio è che non si faccia cosi, nel senso che non in un caso del 
genere l'oggetto non vada confrontato con null...
Qualcuno può dare una mano ad un povero niubbo? :)
grazie 1000 ;)


Ciao... visita==null funziona, e ti restituisce di sicuro un boolean,
quindi se entra in esecuzione l'if esegue il blocco di istruzioni...
A mio avviso quindi il tuo problema è un altro... E se come dici tu è
null, l'if non lo esegue e restituisce direttamente...
Ciao Mirko

mirko...@gmail.com
 ha scritto:

Ciao, grazie della risposta... ho comunque risolto il mio problema con 
un try catch... purtroppo per me, venendo da un linguaggio dove la 
gestione delle eccezioni sembra un workaround (leggi VB), non avevo 
pensato di poterla sfruttare... ne imparo ogni giorno una nuova :)
grazie dell'interesse comunque ;)

 venendo da un linguaggio dove la gestione delle eccezioni sembra
 > un workaround, non avevo pensato di poterla sfruttare...
Attenzione perché una try-catch ha un "costo" di elaborazione ben 
diverso da una if.

 diverso da una if.
bene... grazie dei consigli... proverň a controllare meglio :)

ti consiglio di fare attenzione: come ti diceva Pablo, oltre al costo
dell'elaborazione di un try/catch che sicuramente non è quello di un
if, stai usando male le eccezioni.
Mi spiego: la gestione delle eccezioni nasce per fornire uno strumento
di recupero al programmatore: è un errore, ma posso continuare ad
eseguire. E' qualcosa di straordinario, qualcosa che non deve
diventare normale o che non devo usare per venir fuori da errori di
questo tipo.
Se tu inserisci nel normale flusso di esecuzione la gestione
dell'eccezione, stai rendendo ordinario qualcosa di straordinario ed è
errato.
Ti consiglio di rivedere il codice, magari con un debug serio (in cui
vedi tutti i valori interni alla variabile visita, come ti dicevano
potrebbe essere un valore interno ad essere null).

valia ha scritto:

Intanto grazie mille per l'interessamento :)
Ho appena controllato: in effetti sono in valori interni all'oggetto a 
risultare null, ho fatto il controllo con un if (valore.getId() != null) 
e il tutto funziona correttamente...
Comunque pensavo che, non avendo ancora assegnato nulla all'oggetto, 
risultasse null l'oggetto stesso, per questo facevo il controllo proprio 
nell'oggetto :)
...sono proprio un profano!
grazie ancora per i consigli!!! :)

 grazie ancora per i consigli!!! :)
nessuno nasce che sa fare tutto, col tempo e un po di esperienza si
migliora.
Se sei proprio profano profano dai un'occhiata a qualche libro (tipo
thinking in java o java core 2) per avere basi buone, almeno su queste
cose.
Ciao ciao buona giornata.
il fatto che tu

 Ciao ciao buona giornata.
buona giornata a te e grazie mille per i consigli!! :)