У меня есть таблица cartitems , в которой хранятся товары, добавленные в корзину. В ней есть столбцы:
id (первичный ключ), sku, количество, userId, статус, размер и пара других столбцов
У меня также есть таблица productAvailability , в которой мы храним уровни инвентаризации и где у меня есть следующие столбцы:
sku, размер, количество, BatchId (первичный ключ)
Также таблица product имеет отношения «один ко многим» с таблицей productAvailability и таблицей cartitems для ключа sku
Теперь для каждого cartitems со статусом = 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 и соответствующие BatchIds для каждого из cartItems?