如何在Broadleaf Commerce中按类别对购物车中的OrderItem进行排序?

时间:2017-07-28 19:37:45

标签: broadleaf-commerce

Broadleaf Commerce网站

我需要按照产品类别对购物车中的OrderItem进行排序。目前,我正在使用比较器对OrderItems进行排序。

自定义Cart OrderItems的默认排序的最佳或正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你现在正在做这样的事情:

List<OrderItem> items = cart.getOrderItems();
Collections.sort(items, comparator);

我还假设通过&#34;默认排序&#34;你的意思是你想在调用cart.getOrderItems()时改变行为。

不幸的是,当您调用getOrderItems()时,无法更改查询的行为,因为这是OrderItemOrderImpl集合上的JPA生成的查询:< / p>

@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个选项:

  1. 重写OrderImpl类并更改getOrderItems()方法的实现。除非你真的需要来扩展它(比如将另一列添加到BLC_ORDER),否则这不是一个很好的解决方案,因为它会将另一个表添加到数据库中。实际使用。请参阅Broadleaf extending entities tutorial。您还可以通过切换到单表继承来从技术上避免多表继承,详细信息在该文档的底部详细说明

  2. 在服务方法中的某处添加您自己的查询,该方法使用JPA查询手动查询订单的OrderItem

  3. 执行您当前正在执行的操作,并在使用比较器检索后手动对订单商品进行排序。您可以考虑添加一个Thymeleaf实用程序方法,以便在模板中使用它