このクエリを実行しようとしていますが、コンストラクターで長いパラメーターを受け取る PassageStatistics オブジェクトをインスタンス化しようとすると IllegalArgumentException が発生します。テーブルが空 (null 値のみを含む) の場合、リポジトリ クラスのクエリ メソッドは次のとおりです。
@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 を使用し、サービス クラスで getPassageStatisticsForAllStations を呼び出して try and catch し、そこで例外を処理するか、2 つのクエリを作成する必要がありますか?
ありがとうございます!