Java 如何检测长类型是否实际为NULL?
在我们的MySQL数据库中有一个可为空(type long)列(名为reflection)。我们使用hibernate进行ORM 我试图获取给定成员的列的值。有些是空的,如果不是空的,则是指向另一个成员的id,该成员是推荐人 问题在于我试图检测的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
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中更改数据类型。根据OPmember.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);
}