Broadleaf Commerce网站
我需要按照产品类别对购物车中的OrderItem进行排序。目前,我正在使用比较器对OrderItems进行排序。
自定义Cart OrderItems的默认排序的最佳或正确方法是什么?
答案 0 :(得分:1)
我认为你现在正在做这样的事情:
List<OrderItem> items = cart.getOrderItems();
Collections.sort(items, comparator);
我还假设通过&#34;默认排序&#34;你的意思是你想在调用cart.getOrderItems()
时改变行为。
不幸的是,当您调用getOrderItems()
时,无法更改查询的行为,因为这是OrderItem
内OrderImpl
集合上的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个选项:
重写OrderImpl
类并更改getOrderItems()
方法的实现。除非你真的需要来扩展它(比如将另一列添加到BLC_ORDER
),否则这不是一个很好的解决方案,因为它会将另一个表添加到数据库中。实际使用。请参阅Broadleaf extending entities tutorial。您还可以通过切换到单表继承来从技术上避免多表继承,详细信息在该文档的底部详细说明
在服务方法中的某处添加您自己的查询,该方法使用JPA查询手动查询订单的OrderItem