2012-01-05 28 views
5

Chúng tôi có một cột (loại dài) không có giá trị (được đặt tên giới thiệu) trong cơ sở dữ liệu MySQL của chúng tôi. Chúng tôi sử dụng hibernate cho ORM.Làm thế nào để phát hiện nếu một loại dài thực sự là NULL?

Tôi đang cố gắng lấy giá trị của cột cho một thành viên nhất định. Một số là null, và nếu không, một id của nó trỏ đến một thành viên khác có referrer.

Vấn đề là trong mã java Tôi đang cố gắng phát hiện nếu cột của thành viên đó là null, nếu không, hãy làm điều gì đó.

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

member.getReferral() trả về giá trị (loại dài) của cột giới thiệu. Một số cột đó là null và một số thì không.

Mã trên biên dịch tốt, nhưng tôi nhận được một nullPointerException khi tôi gọi phương thức trên người dùng có cột giới thiệu là rỗng.

Tôi làm cách nào để phát hiện đúng cách này?

Cảm ơn trước!

Full Trả lời:

Nhờ @Marcelo cho câu trả lời đúng nhất.

Đây là mã trong trạng thái cuối cùng của nó:

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

kiểu trả về của 'member.getReferral()' là gì? –

+0

@Ted Hopp - dài – UpHelix

+0

Tôi giả sử bạn có nghĩa là 'Long' vì một' long' là một kiểu nguyên thủy và không thể có nó là null. 'Long' có thể là null mặc dù. Kiểm tra giá trị trả về của 'getReferral()' trực tiếp và không cố chuyển đổi nó thành một chuỗi. – gnomed

Trả lời

3

Giả sử member.getReferral() lợi nhuận một Long, sử dụng:

if (member.getReferral() != null) 

Trong Hibernate, nếu bạn muốn để có thể phát hiện nullability trong một thuộc tính, bạn không phải sử dụng các loại nguyên thủy vì họ sẽ luôn luôn có một giá trị mặc định. 0 trong thời gian dài.

+1

Cảm ơn, nhưng nó không trả về "Dài", nó trả về "dài", như tôi hiểu, không phải là không có chỗ "Long" có thể. – UpHelix

+2

@Dale Nếu bạn muốn phát hiện nullability cho thuộc tính giới thiệu bằng cách sử dụng Hibernate, bạn phải thay đổi kiểu dữ liệu của thuộc tính thành Long. Nếu không, member.getReferral() sẽ trả về 0 khi giá trị cột là null. – Marcelo

+0

cảm ơn, tôi đã sử dụng đề xuất của bạn để tìm giải pháp. – UpHelix

4

Trường hợp ngoại lệ có thể xuất phát từ Long.toString(), hãy thử kiểm tra giá trị trước khi chuyển đổi thành một chuỗi:

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

Theo OP 'member.getReferral()' trả về không dài. – anubhava

+0

Bạn sẽ không nhận được ngoại lệ nữa, nhưng bạn sẽ không bao giờ phát hiện tính không có khả năng của cột. – Marcelo

4

Thay đổi

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

Đến:

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

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

Có khả năng bạn đang nhận được NullPointerException khi bạn gọi Long.toString() bằng tham số rỗng.

0

sử dụng Dưới mã:

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

OP cho biết 'member.gerReferral()' trả về giá trị nguyên thủy 'long', và cụ thể không phải là' Long'. –

Các vấn đề liên quan