3

私は Hibernate を使用しており、結果に対して基本的な算術関数を実行する必要があります。これが私の状況です:

を保存odometerしていfuelて、 を計算したいと思いますfuelEconomyodometerしかし、それを行うには、前の結果から得られる前の測定値を知る必要があります。これがイラストです。

テーブル:

ODOMETER | FUEL
65000.0  | 5.000
65500.0  | 15.000

ポジョ:

public class FuelLog {
  private double odometer;
  private double fuel;
  private double fuelEconomy;

  /* Getters and Setters */
}

Criteria を使用してこれを達成できますか? それとも HQL クエリに頼る必要がありますか? それともまとめて別レイヤーに任せたほうがいいのでしょうか?

4

1 に答える 1

1

私はそれを別の方法で行います。走行距離計の開始値をデータベースに保存し、移動にかかった KM (またはマイル) を保存します。

START |  TRIP | FUEL
60000 |  5000 | 5.0
65000 | 15000 | 15.0

次に、これを Java クラスとして使用します。

public class FuelLog {
  private double start;
  private double trip;
  private double fuel;
}

これは、たとえば銀行口座の金銭取引を記録するために通常行われるのと同じ手法です。唯一の落とし穴は、ギャップや不一致を回避するために、「開始」が常に前の開始 + 前の旅行に等しいことを確認する必要があることです。

アイデアは、このクラスのインスタンスが有効なインスタンスであるために他のインスタンスに依存してはならないということです。

この場合は有効ではないと思われる別の解決策は、「シーケンス番号」をインデックスとしてログに保存することです。例えば:

START |  TRIP | FUEL | INDEX
60000 |  5000 | 5.0  | 1
65000 | 15000 | 15.0 | 2

FuelLog次に、 Hibernate でインデックス付きリストとしてマップされた のコレクションを含む Java クラスを作成します。

public class Car {
  private List<FuelLog> fuelLog;
  public double getFuelEconomy(FuelLog log){/* your implementation goes here */}
}

Carは、以前のログ エントリにアクセスできるため、特定のログ エントリの燃費の計算を担当します。しかし、それではfuelEconomyFuelLog.

于 2011-01-11T13:47:07.467 に答える