gpt4 book ai didi

java - 如果表仅包含 null,如何使用构造函数实例化一个需要很长时间的对象?

转载 作者:行者123 更新时间:2023-12-02 07:01:51 25 4
gpt4 key购买 nike

我尝试执行此查询,但在尝试实例化在其构造函数中采用长参数的 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 和 catch 中调用 getPassageStatisticsForAllStations 并处理那里的异常还是进行 2 个查询?

谢谢你的正手!

最佳答案

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

正如注释中所指出的,如果构造函数中传递的值为 null,则在 bean 中指定默认值是合理的。像这样的事情会起作用:

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;
}
}

关于java - 如果表仅包含 null,如何使用构造函数实例化一个需要很长时间的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com