Гибернация и арифметика, включающая определенные строки - PullRequest
3 голосов
/ 11 января 2011

Я использую 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 */
}

Могу ли я выполнить это с помощью критериев или мне придется прибегнуть к HQL-запросу?Или лучше оставить все это на другом слое?

1 Ответ

1 голос
/ 11 января 2011

Я бы сделал это по-другому. Я бы сохранил в базе данных начальное значение одометра и запомнил бы, сколько КМ (или миль) поездка прошла:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...