我正在使用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查询?或者最好将它们留在一个不同的层中?
答案 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
。