Общий вопрос, вы, по сути, имеете дело с длинной транзакцией .Как правило, это действительно сложная проблема, так как вам приходится иметь дело с проблемами параллелизма.Однако, если вы хотите сделать это, вам, вероятно, понадобятся объекты Domain, которые соответствуют задействованным сущностям
class ShoppingCart
{
static belongsTo = [ person : Person ]
static hasMany = [ item : ShoppingCartItem ]
static hasOne = [state : ShoppingCartState ]
}
Вы можете использовать шаблон State для инкапсуляции состояния,и сохраняйте его в БД в конце каждого перехода веб-потока.
Если ваш вариант использования проще, вы можете что-то сделать с Audit Logging .