休眠和涉及特定行的算术

时间:2011-01-11 12:46:21

标签: hibernate hibernate-criteria

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

我正在存储odometerfuel,并希望计算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查询?或者最好将它们留在一个不同的层中?

1 个答案:

答案 0 :(得分: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将负责计算特定日志条目的燃料经济性,因为它可以访问先前的日志条目。但是,您的fuelEconomy中不会有FuelLog