Найти общую стоимость заказа с помощью JPA - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть приложение JPA с диаграммой сущностей, которая показывает отношения между заказами и клиентами.

У меня есть класс сущности ItemType как таковой:

@Entity
public class ItemType implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String description;
private int price;
List<OrderLine> orderlines;

класс содержит список OrderLines, поскольку он имеет отношение один ко многим к сущности orderline.

Вот моя сущность OrderLine.Он содержит один экземпляр класса ItemType из-за взаимосвязи.

@Entity
public class OrderLine implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private int quantity;
private Order order;
private ItemType itemtype;

У меня есть класс фасада, где я создал разные методы для вычисления и выбора элементов из моей базы данных, но я хочусоздайте метод Calculate, который умножает количество из строки заказа на цену из ItemType.

Я знаю, что функции должны принимать как экземпляр ItemType, так и экземпляр OrderLine, например:

 public int getTotalPrice(ItemType itemtype, OrderLine orderline){


}

но я не уверен, должен ли я использовать NamedQueries внутри классов сущностей, чтобы получать данные из базы данных, или я должен использовать что-то вроде аннотации значения, которая может сделать расчет.

1 Ответ

0 голосов
/ 14 сентября 2018

Обе опции действительны и имеют свои плюсы и минусы.

Если вы определите его как Query, вы получите меньше Java-кода.Запрос будет привязан к вашей сущности, поэтому он будет менее подробным.

С другой стороны, вы не сможете воспользоваться кешем 1-го уровня, который представляет сеанс гибернации.Единственный способ кешировать результаты - через кеш запросов второго уровня, если вы настроите его, и все же этот тип кеширования не очень хорош.

Если вы решите использовать Java, вы в полной мере воспользуетесь своим Hibernate.Сессия и ее функциональность.У вас будет очень хороший контроль над тем, какие запросы, как часто и сколько выполняются.Вы сможете отлаживать свой код Java.Вы сможете выполнить его модульное тестирование.

Сводка ваших опций:

  1. Воспользуйтесь запросом, позвоните в службу.
  2. Используйте формулу, чтобывам не нужно вызывать ваш запрос, но вместо этого, как только вы загрузите сущность, ваша формула будет оценена.
  3. Сделайте Java-метод, который обходит ваше дерево и вычисляет значение.В приложениях, интенсивно использующих кэш-память, это наиболее эффективный способ, а также очень легко выполнить модульное тестирование.
...