[英]Spring Data JPA native query does not follow naming convention with projections
[英]Java Handling NPE in Spring Data native query Projections
我想知道是否有办法检查本机查询的结果对象是否包含所有空值。 例如,以下代码尝试使用 nativeQuery 获取投影,但由于所有字段均为空,因此会引发 NPE。
投影:
public interface MetricsCountData {
Long getLikes ();
Long getComments ();
Long getImpressions ();
Long getShares ();
}
存储方法:
@Query(nativeQuery = true, value = "select sum(impressions) as impressions, sum(likes) as likes, sum(comments) as comments, sum(shares) as shares " +
"from facebook_post_analytics As a " +
"JOIN " +
"(select post_id, max(id) As id " +
"from facebook_post_analytics " +
"where partner_id = :partnerId " +
"AND page_id = :pageId " +
"AND insights_epoch BETWEEN :startEpoch AND :endEpoch " +
"group by post_id) AS b " +
"ON a.id = b.id")
MetricsCountData findFacebookMetricsData(Long partnerId, String pageId, Long startEpoch, Long endEpoch);
我的服务类中的片段:
MetricsCountData metricsCountData = dataRepository.findFacebookMetricsData(partnerId,pageId,startEpoch,endEpoch);
if(metricsCountData == null) //Useless Check
{
return;
}else{
return metricsCountData.getImpressions() + metricsCountData.getLikes(); //Representative Logic
}
现在,有没有一种方法可以轻松检查所有投影 getter 是否为空,因为 metricsCountObject 始终为非空,并且我总是进入 else 流并在那里获得 NPE。
注意:我的投影中有很多 getter,因此可以避免对每个 getter 进行事先空检查。 另外,我尝试过使用 Object[],它也有同样的问题。
有没有更好的办法?
任何帮助都感激不尽。
您可以在java端签入:
if(metricsCountData == null || metricsCountData.getImpressions() == null || metricsCountData.getLikes() == null) //Useless Check
{
return;
}else{
return metricsCountData.getImpressions() + metricsCountData.getLikes(); //Representative Logic
}
或者在 SQL 端通过向查询添加 HAVING 子句:
HAVING sum(impressions) IS NOT NULL AND sum(likes) IS NOT NULL
代码片段仅考虑印象和喜欢,但您显然也可以将其扩展到其他属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.