Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果表中只包含null,如何使用花费很长时间的构造函数实例化对象?_Java_Jpa_Jpql - Fatal编程技术网

Java 如果表中只包含null,如何使用花费很长时间的构造函数实例化对象?

Java 如果表中只包含null,如何使用花费很长时间的构造函数实例化对象?,java,jpa,jpql,Java,Jpa,Jpql,我正在尝试执行此查询,但在尝试实例化PassageStatistics对象(该对象在其构造函数中采用长参数)时,如果表为空(仅包含空值),则会得到IllegalArgumentException,存储库类中的查询方法如下: @SuppressWarnings("unchecked") @Override public PassageStatistics getPassageStatisticsForAllStations() { Query query = em

我正在尝试执行此查询,但在尝试实例化PassageStatistics对象(该对象在其构造函数中采用长参数)时,如果表为空(仅包含空值),则会得到IllegalArgumentException,存储库类中的查询方法如下:

@SuppressWarnings("unchecked")
@Override
public PassageStatistics getPassageStatisticsForAllStations() {
    Query query = 
            em.createQuery("SELECT NEW com.henrikpetersson.cartoll.tolldomain.domain.PassageStatistics(count(p), sum(price)) from Passage p");

    return (PassageStatistics) query.getSingleResult();
}
这是PassageStatistics的目标:

public class PassageStatistics {

    private long passageCount;
    private long revenue;

    public PassageStatistics(long passageCount, long revenue) {
        this.passageCount = passageCount;
        this.revenue = revenue;
    }

      public PassageStatistics() {}

}
什么是最佳实践?我应该在我的服务类中使用包装器Long,在try-and-catch中调用getPassageStatisticsForAllStations并在那里处理异常,还是进行两次查询


谢谢你的正手

如果要求在构造函数中接受null作为有效值,那么参数的类型必须是objects,这意味着问题的答案是yes,您应该使用
(Long,Long)

正如在注释中指出的,在bean中指定一个默认值是合理的,如果在构造函数中传递的值为null,您将使用该值。类似这样的方法会奏效:

public class PassageStatistics {

    private static final Long DEFAULT_PASSAGE_COUNT = 0;
    private static final Long DEFAULT_REVENUE = 0;
    private long passageCount;
    private long revenue;

    public PassageStatistics(Long passageCount, Long revenue) {
        this.passageCount = passageCount == null ? DEFAULT_PASSAGE_COUNT : passageCount;
        this.revenue = revenue == null ? DEFAULT_REVENUE : revenue;
    }
}

@Henrik这是一个很好的答案,但不要使用try/catch,只需检查
==null
,并将
0
设置为字段的值+1.谢谢。:)顺便说一句,“?”是什么意思??(我是一名学生)。@Henrik这是我的演讲