2012-01-05 16 views
5

Abbiamo una colonna nullable (tipo lungo) (chiamata referral) nel nostro database MySQL. Usiamo l'ibernazione per ORM.Come rilevare se un tipo lungo è effettivamente NULL?

Sto cercando di ottenere il valore della colonna per un determinato membro. Alcuni sono nulli e, se non lo sono, è un id che punta a un altro membro di cui è il referrer.

Il problema è nel codice java Sto cercando di rilevare se la colonna di quel membro è nullo, altrimenti, fare qualcosa.

String referrerAffiliateId = Long.toString(member.getReferral()); 
if (referrerAffiliateId != null){ 
    //do something 
} 

member.getReferral() restituisce il valore (tipo long) della colonna di riferimento. Alcune di queste colonne sono nulle e altre no.

Il codice sopra riportato viene compilato correttamente, ma viene visualizzato nullPointerException quando si chiama il metodo su un utente la cui colonna di riferimento è null.

Come si esegue correttamente un rilevamento su questo?

Grazie in anticipo!

risposta completa:

Grazie alla @Marcelo per la migliore risposta corretta.

Ecco il codice nel suo stato finale:

Long referrerAffiliateId = member.getReferral(); 
if (referrerAffiliateId != null) { 
    //... 
} 
+0

Qual è il tipo di ritorno di 'member.getReferral()'? –

+0

@Ted Hopp - long – UpHelix

+0

Suppongo tu intenda "Long' poiché un' long' è un tipo primitivo e non è possibile averlo essere nullo. 'Long' può essere nullo però. Controlla direttamente il valore di ritorno di 'getReferral()' e non provare a convertirlo in una stringa. – gnomed

risposta

3

Assumendo member.getReferral() restituisce un Long, uso:

if (member.getReferral() != null) 

In Hibernate, se si vuole essere in grado di rilevare valori Null in una proprietà, non si devono usare i tipi primitivi, perché avranno sempre un valore predefinito. 0 per i lunghi.

+1

Grazie, ma non restituisce "Long", restituisce "long", che, a quanto ho capito, non è annullabile dove può essere "Long". – UpHelix

+2

@Dale Se si desidera rilevare l'annullamento del valore per la proprietà del referral utilizzando Hibernate, è necessario modificare il tipo di dati della proprietà su Long. Altrimenti, member.getReferral() restituirà 0 quando il valore della colonna è nullo. – Marcelo

+0

grazie, ho usato il tuo suggerimento per venire a una soluzione. – UpHelix

4

L'eccezione deriva probabilmente da Long.toString(), provare a controllare il valore prima della conversione in una stringa:

Long ref = member.getReferral(); 
if (ref == null) { 
    // Do something... 
} else { 
    String referrerAffiliateId = Long.toString(ref); 
    // ... 
} 
+2

Come da OP 'member.getReferral()' restituisce long not Long. – anubhava

+0

Non riceverai più un'eccezione, ma non scoprirai mai l'annullabilità della colonna. – Marcelo

4

Change

String referrerAffiliateId = Long.toString(member.getReferral()); 
if (referrerAffiliateId != null){ 
    //do something 
} 

A:

È probabile che si ottenga il NullPointerException quando si chiama Long.toString() con un parametro null.

0

uso sottostante Codice:

Long ref = member.getReferral(); 
    String referrerAffiliateId = null; 
    if(ref != null){ 
    referrerAffiliateId = Long.toString(ref); 
    } 
+0

OP ha detto che 'member.gerReferral()' restituisce un primitivo 'long', e specificamente non un' Long'. –

Problemi correlati