Вы должны использовать modelService
, чтобы удалить любую модель из базы данных. В вашем случае все, что вам нужно сделать, это передать список от cartEntryModel до getModelService().removeAll(list)
Посмотрите на DefaultCartService updateQuantities , в основном этот метод вызывается с количеством 0 для записи корзины, которую пользователь пытается удалить из корзины.
final Collection<CartEntryModel> toRemove = new LinkedList<CartEntryModel>();
final Collection<CartEntryModel> toSave = new LinkedList<CartEntryModel>();
for (final Map.Entry<CartEntryModel, Long> e : getEntryQuantityMap(cart, quantities).entrySet())
{
final CartEntryModel cartEntry = e.getKey();
final Long quantity = e.getValue();
if (quantity == null || quantity.longValue() < 1)
{
toRemove.add(cartEntry);
}
else
{
cartEntry.setQuantity(quantity);
toSave.add(cartEntry);
}
}
getModelService().removeAll(toRemove);
Вы можете получить ту же форму, используя скрипт groovy. См. создание Cronjob с использованием сценария Groovy в SAP Hybris
Groovy Пример сценария:
import de.hybris.platform.servicelayer.search.FlexibleSearchQuery;
import de.hybris.platform.servicelayer.model.ModelService;
import de.hybris.platform.core.model.user.CartEntryModel;
import de.hybris.platform.servicelayer.search.SearchResult;
import org.apache.commons.collections.CollectionUtils;
def removeCartEntries()
{
final SearchResult<CartEntryModel> searchResults = flexibleSearchService.search("query to get the list of cartentries")
if (searchResults != null && CollectionUtils.isNotEmpty(searchResults.getResult())) {
modelService.removeAll(searchResults.getResult());
}
}
removeCartEntries();
println "done";