【发布时间】:2018-09-14 19:16:03
【问题描述】:
我有一个带有实体图的 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;
我有一个外观类,我在其中创建了不同的方法来计算和选择我的数据库中的元素,但我想创建一个 calculatePrice 方法,它将订单行中的数量与 ItemType 中的价格相乘。
我知道函数需要同时采用 ItemType 实例和 OrderLine 实例,如下所示:
public int getTotalPrice(ItemType itemtype, OrderLine orderline){
}
但我不确定是否应该在实体类中使用 NamedQueries 从数据库中获取数据,或者我应该使用可以进行计算的值注释之类的东西。
【问题讨论】:
-
我不认为这是基于主要意见的问题。使用 Query 或使用 Hibernate 会话会产生直接后果,并且根据上下文具有不同类型的优势。我投票反对为此目的关闭它。
-
这里没有更好的做法。在 99% 的情况下,最好选择最干净、最易读的选项。有时,当您使用 Hibernate Session 在其缓存上大量中继的应用程序时效率更高,因为与使用查询时相比,您将在缓存上获得更多命中。当您使用查询时,您会转移数据库上的负载。这并不是一件坏事!
-
我认为所有的努力真的不值得。仅当您希望学习更多休眠功能时才值得这样做 :) 正如我所说,在一般情况下,这里没有不好的选择。
-
不,你不能那样做。您希望能够读取该属性。如果您选择 Java 版本,则根本不需要维护属性。只需在 OrderLine calculateTotalPrice 中执行一种方法,使用“this”从 ItemType 中获取值执行计算并返回结果。工作完成。
-
如果此方法位于您的 OrderLine 中,则根本不需要向该方法传递参数
标签: java hibernate jpa orm hibernate-mapping