我有一个表caritems存储添加到购物车的项目。它有列:
id(主键)、sku、数量、userId、状态、大小和其他几列
我还有一个productAvailability表,我们在其中存储 Inventory 级别,并且我有以下列:
sku、大小、数量、BatchId(主键)
产品表也与sku键上的productAvailability表和caritems表具有一对多关系
现在,对于 status = 1 和 userId=x 的每个 Cartitems,我们需要检查产品的可用性,如果可用,我需要 CartItems 行和产品的 BatchId:
我到了这里:
Criteria criteria = session.createCriteria(CartItems.class,"cartitems");
criteria.add(Restrictions.eq("userId", userId));
criteria.add(Restrictions.eq("status", status));
criteria.createAlias("product", "product");
criteria.createAlias("product.productAvailability", "productavailability");
criteria.add(Restrictions.eqProperty("productavailability.size", "cartitems.size"));
criteria.add(Restrictions.geProperty("productavailability.quantity", "cartitems.quantity"));
List<CartItems> cartItems = criteria.list();
以上基本上做到以下几点:
select * from cartItems
where productAvailability.quantity >= cartitems.quantity and
productAvailability.size = cartitems.size and
productAvailability.sku = cartitems.sku and
cartitems.userId = ? and
cartitems.status = ?
这样我就无法获得 BatchId。我尝试使用 JOIN FETCHTYPE,但它仍然会加载包含所有大小 sku 的 productAvailability 表。是否有任何方法可以同时获取每个 cartItems 的 cartItems 和相应的 BatchIds?