gpt4 book ai didi

java - 使用 JPA 查找订单的总价

转载 作者:行者123 更新时间:2023-12-02 10:48:47 28 4
gpt4 key购买 nike

我有一个 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;

该类包含 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;

我有一个门面类,我在其中创建了不同的方法来计算和选择数据库中的元素,但我想创建一个calculatePrice方法,它将订单行中的数量与ItemType中的价格相乘。

我知道这些函数需要同时采用 ItemType 实例和 OrderLine 实例,如下所示:

 public int getTotalPrice(ItemType itemtype, OrderLine orderline){


}

但我不确定是否应该在实体类中使用 NamedQueries 从数据库中获取数据,或者我应该使用诸如值注释之类的东西来进行计算。

最佳答案

这两个选项都是有效的,并且各有优缺点。

如果你将其定义为Query,你将获得更少的java代码。查询将绑定(bind)到您的实体,在某种程度上它会更简洁。

缺点是您将无法利用 hibernate session 提供的一级缓存。如果您配置了二级查询缓存,那么缓存结果的唯一方法是通过二级查询缓存,但这种类型的缓存仍然不是很好。

如果您决定使用 java,您将充分利用 Hibernate Session 及其功能。您将可以很好地控制执行哪些查询、执行频率和次数。您将能够调试您的 Java 代码。您将能够对其进行单元测试。

您的选择摘要:

  1. 使用查询,从您的服务中调用它。
  2. 使用公式,这样您就不需要调用查询,而是在加载实体后就会对公式进行求值。
  3. 执行一个遍历树并计算值的 java 方法。在缓存密集型应用程序中,这是性能最高的方法,而且也很容易进行单元测试。

关于java - 使用 JPA 查找订单的总价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338041/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com