3

我正在使用 Hibernate,需要对结果执行基本的算术函数。这是我的情况:

我正在存储odometer并且fuel想要计算fuelEconomy. 但要做到这一点,我需要知道之前的odometer读数,这将来自之前的结果。这是一个插图。

桌子:

ODOMETER | FUEL
65000.0  | 5.000
65500.0  | 15.000

POJO:

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

  /* Getters and Setters */
}

我可以使用 Criteria 完成此操作,还是必须求助于 HQL 查询?或者这会更好地留在不同的层吗?

4

1 回答 1

1

我会做不同的事情。我将在数据库中存储起始里程表值,并存储行程所用的公里数(或英里数):

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

然后,您将拥有一个 Java 类,其中包含 的集合FuelLog,映射为 Hibernate 中的索引列表:

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

Car然后,将负责计算特定日志条目的燃油经济性,因为它可以访问以前的日志条目。但是,您fuelEconomyFuelLog.

于 2011-01-11T13:47:07.467 回答