2012-01-05 37 views
5

Mamy kolumnę zerową (typ long) (o nazwie referral) w naszej bazie danych MySQL. Używamy hibernacji dla ORM.Jak wykryć, czy długi typ jest rzeczywiście NULL?

Próbuję uzyskać wartość kolumny dla danego członka. Niektóre mają wartość zerową, a jeśli nie, to ich identyfikator wskazuje na innego członka, który jest stroną odsyłającą.

Problem leży w kodzie java, który próbuję wykryć, jeśli kolumna tego członka ma wartość zerową, a jeśli nie, zrób coś.

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

element.getReferral() zwraca wartość (typ long) kolumny odsyłającej. Niektóre z tych kolumn mają wartość zerową, a inne nie.

Powyższy kod kompiluje dobrze, ale otrzymuję wyjątek nullPointerException, gdy wywołuję metodę na użytkowniku, którego kolumna odsyłająca ma wartość null.

Jak prawidłowo wykonać wykrywanie w tej sprawie?

Z góry dziękuję!

Pełna Odpowiedź:

Dzięki @Marcelo dla najlepszego poprawnej odpowiedzi.

Oto kod w stanie końcowym:

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

Jaki jest rodzaj powrót 'member.getReferral()'? –

+0

@ Ted Hopp - long – UpHelix

+0

Zakładam, że masz na myśli 'Long', ponieważ' long' jest typem pierwotnym i nie można go uznać za wartość null. "Long" może mieć wartość zerową. Sprawdź zwracaną wartość 'getReferral()' bezpośrednio i nie próbuj przekonwertować go na ciąg znaków. – gnomed

Odpowiedz

3

Zakładając member.getReferral() Zwraca Long, przeznaczenie:

if (member.getReferral() != null) 

W Hibernate, jeśli chcesz być w stanie wykryć opcje dopuszczania wartości null w nieruchomości, nie wolno używać prymitywnych typów, ponieważ będą one zawsze mają wartość domyślną. 0 dla długich.

+1

Dzięki, ale nie zwraca "Long", zwraca "długi", co, jak rozumiem, nie jest nullable, gdzie "Long" może być. – UpHelix

+2

@Dale Jeśli chcesz wykryć funkcję zerowania dla właściwości odwołania przy użyciu Hibernate, musisz zmienić typ danych właściwości na Long. W przeciwnym razie funkcja member.getReferral() zwróci wartość 0, gdy wartość kolumny będzie pusta. – Marcelo

+0

dziękuję, wykorzystałem twoją sugestię, aby dojść do rozwiązania. – UpHelix

4

Wyjątkiem pochodzi prawdopodobnie od Long.toString(), spróbuj sprawdzając wartość przed konwersją na ciąg znaków:

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

Zgodnie z OP 'member.getReferral()' zwraca długo nie długo. – anubhava

+0

Nie otrzymasz już wyjątku, ale nigdy nie wykryjesz pustki w kolumnie. – Marcelo

4

Zmień

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

Do:

if (member.getReferral() != null){ 

    String referrerAffiliateId = Long.toString(member.getReferral()); 
    //do something 
} 

Prawdopodobnie uzyskujesz NullPointerException po wywołaniu Long.toString() z pustym parametrem.

0

skorzystać z poniższego kodu:

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

OP powiedział, że 'member.gerReferral()' zwraca pierwotny 'long', a konkretnie nie' Long'. –

Powiązane problemy