如何按其在 Broadleaf Commerce 上的类别对购物车中的 OrderItems 进行排序?
How to sort the OrderItems in the cart by its category on Broadleaf Commerce?
Broadleaf Commerce 网站
我需要按产品类别对购物车中的 OrderItems 进行排序。目前,我正在使用比较器对 OrderItems 进行排序。
自定义购物车订单项默认排序的最佳或正确方法是什么?
我假设您目前正在做这样的事情:
List<OrderItem> items = cart.getOrderItems();
Collections.sort(items, comparator);
我还假设 "default sort" 你的意思是你想在调用 cart.getOrderItems()
时改变行为。
遗憾的是,无法更改调用 getOrderItems()
时发生的查询行为,因为这是对 OrderImpl
中的 OrderItem
集合的 JPA 生成查询:
@OneToMany(mappedBy = "order", targetEntity = OrderItemImpl.class, cascade = {CascadeType.ALL})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region="blOrderElements")
@AdminPresentationCollection(friendlyName="OrderImpl_Order_Items",
tab = TabName.General)
protected List<OrderItem> orderItems = new ArrayList<>();
因此,您实际上只有 3 个选择:
覆盖 OrderImpl
class 并更改 getOrderItems()
方法的实现。除非你真的 需要 扩展它(比如向 BLC_ORDER
添加另一列),否则这不是一个很好的解决方案,因为它会向 table 添加另一个实际未使用的数据库。参见Broadleaf extending entities tutorial。您还可以通过切换到单 table 继承在技术上避免多 table 继承,这在该文档的底部有详细说明
在使用 JPA 查询
手动查询 OrderItem
订单的服务方法中的某处添加您自己的查询
- 做您当前正在做的事情,并在使用比较器检索后手动对订单项目进行排序。您可能会考虑添加一个 Thymeleaf 实用程序方法,以便在您的模板中使用它
Broadleaf Commerce 网站
我需要按产品类别对购物车中的 OrderItems 进行排序。目前,我正在使用比较器对 OrderItems 进行排序。
自定义购物车订单项默认排序的最佳或正确方法是什么?
我假设您目前正在做这样的事情:
List<OrderItem> items = cart.getOrderItems();
Collections.sort(items, comparator);
我还假设 "default sort" 你的意思是你想在调用 cart.getOrderItems()
时改变行为。
遗憾的是,无法更改调用 getOrderItems()
时发生的查询行为,因为这是对 OrderImpl
中的 OrderItem
集合的 JPA 生成查询:
@OneToMany(mappedBy = "order", targetEntity = OrderItemImpl.class, cascade = {CascadeType.ALL})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region="blOrderElements")
@AdminPresentationCollection(friendlyName="OrderImpl_Order_Items",
tab = TabName.General)
protected List<OrderItem> orderItems = new ArrayList<>();
因此,您实际上只有 3 个选择:
覆盖
OrderImpl
class 并更改getOrderItems()
方法的实现。除非你真的 需要 扩展它(比如向BLC_ORDER
添加另一列),否则这不是一个很好的解决方案,因为它会向 table 添加另一个实际未使用的数据库。参见Broadleaf extending entities tutorial。您还可以通过切换到单 table 继承在技术上避免多 table 继承,这在该文档的底部有详细说明在使用 JPA 查询
手动查询 - 做您当前正在做的事情,并在使用比较器检索后手动对订单项目进行排序。您可能会考虑添加一个 Thymeleaf 实用程序方法,以便在您的模板中使用它
OrderItem
订单的服务方法中的某处添加您自己的查询