カートに追加されたアイテムが格納されるテーブルcaritemsがあります。列があります。
id (主キー)、sku、数量、userId、ステータス、サイズ、その他の列
在庫レベルを格納するproductAvailabilityテーブルもあり、次の列があります。
sku、サイズ、数量、BatchId (主キー)
また、製品テーブルには、 skuキーの両方で、productAvailabilityテーブルおよびcaritemsテーブルと 1 対多の関係があります。
ここで、status = 1 および userId=x の各カートアイテムについて、商品の在庫状況を確認する必要があります。在庫がある場合は、商品の 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 を使用してみましたが、引き続き productAvailability テーブルにすべてのサイズの SKU が読み込まれます。各cartItemsのcartItemsと対応するBatchIdsの両方を取得する方法はありますか?