Java 如何检测长类型是否实际为NULL?

Java 如何检测长类型是否实际为NULL?,java,hibernate,nullpointerexception,long-integer,Java,Hibernate,Nullpointerexception,Long Integer,在我们的MySQL数据库中有一个可为空(type long)列(名为reflection)。我们使用hibernate进行ORM 我试图获取给定成员的列的值。有些是空的,如果不是空的,则是指向另一个成员的id,该成员是推荐人 问题在于我试图检测的java代码中该成员的列是否为null,如果不是,请执行一些操作 String referrerAffiliateId = Long.toString(member.getReferral()); if (referrerAffiliateId != n

在我们的MySQL数据库中有一个可为空(type long)列(名为reflection)。我们使用hibernate进行ORM

我试图获取给定成员的列的值。有些是空的,如果不是空的,则是指向另一个成员的id,该成员是推荐人

问题在于我试图检测的java代码中该成员的列是否为null,如果不是,请执行一些操作

String referrerAffiliateId = Long.toString(member.getReferral());
if (referrerAffiliateId != null){
    //do something
}
getReferral()返回引用列的值(键入long)。其中一些列为null,而另一些列则不是

上面的代码编译得很好,但是当我对引用列为null的用户调用该方法时,会得到一个nullPointerException

如何正确地对此进行检测

提前谢谢

完整答案:

感谢@Marcelo提供了最好的正确答案

以下是处于最终状态的代码:

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

异常可能来自
Long.toString()
,请在转换为字符串之前尝试检查该值:

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

致:


当您使用空参数调用
Long.toString()
时,很可能会得到
NullPointerException

假设
member.getReferral()
返回
Long
,请使用:

if (member.getReferral() != null)
在Hibernate中,如果希望能够检测属性中的可空性,则不能使用基元类型,因为它们对于long总是具有默认值
0

使用以下代码:


member.getReferral()
的返回类型是什么?我假设您的意思是
Long
,因为
Long
是一种基本类型,不可能为null<代码>长可以为空。直接检查
getReferral()
的返回值,不要试图将其转换为字符串。根据注释和您的响应,我认为是时候进行实际堆栈跟踪,以查看错误真正发生的位置了。我怀疑getReferral()中有某种东西是自动取消绑定并导致NPE的。getReferral()的源代码可能也有帮助。谢谢,但它不返回“Long”,它返回“Long”,据我所知,“Long”在“Long”可以为空的地方是不可为空的。@Dale如果要使用Hibernate检测referral属性的可为空性,必须将属性的数据类型更改为Long。否则,当列值为null时,member.getReferral()将返回0。我选择此解决方案是因为答案使用的代码更少,更干净,并且@Marcelo建议在hibernate中更改数据类型。根据OP
member.getReferral()
返回long not long。您将不再获得异常,但是您永远不会检测到列的可空性。OP说
member.gerReferral()
返回一个原语
long
,而不是
long
if (member.getReferral() != null){

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