如何总结一对多关系JPA中每个项目的成本?
Posted
技术标签:
【中文标题】如何总结一对多关系JPA中每个项目的成本?【英文标题】:How to sum the cost of each item in a One To Many relationship JPA? 【发布时间】:2020-11-26 05:52:38 【问题描述】:如何计算一对多关系中的订单总数,当客户购买了订单属性中的一定数量的商品时,他想知道,他可以开始调查,执行那个。真的有点迷茫,好想学
@Entity
@Table(name = "orders")
class Order(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Int? = 0,
val name: String? = "",
val address: String? = "",
val phone: String? = "",
val totalOrderPrice: Long? // total based on the cost of each item
@OneToMany(cascade = [CascadeType.MERGE])
@JoinColumn(name = "order_id")
val items: List<Items>? = mutableListOf()
)
@Entity
@Table(name = "items")
class Items(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
val name: String? = null,
val price: Long?, // cost item
)
【问题讨论】:
检查这是否是您的solution。 【参考方案1】:首先,您需要更正映射。在子实体中,您应该有父实体的引用。这意味着在“Items”类中添加对 Order id 的引用作为列“orderId”。那么你的类应该是这样的
@Entity
@Table(name = "items")
class Items(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
val orderId: int? = null,
val name: String? = null,
val price: Long?, // cost item
)
现在,您有 3 个选项来计算订单的总价
像这样编写 JPA 查询
@Query("SELECT SUM(m.price) FROM Items m where orderId = :orderId")
Long getOrderPrice(@Param("orderId") Long orderId);
像这样编写 Native SQL 查询
@Query("SELECT SUM(price) FROM items where order_id = :orderId", nativeQuery = true)
Long getOrderPrice(@Param("orderId") Long orderId);
在Java中使用流或for循环,计算总价
Long sum = order.getItems.map(i->i.getprice()).stream().reduce(Long::sum).get();
【讨论】:
非常感谢您的帮助!你太棒了 很高兴知道它对你有帮助以上是关于如何总结一对多关系JPA中每个项目的成本?的主要内容,如果未能解决你的问题,请参考以下文章