Столкнулся с такой проблемой. Есть у меня такая связь доменов:
class Sale {
Client client
}
class Client {
String barcode
static hasMany = [sales:Sale]
}
Когда я в сервисе вызываю метод, который меняет связи с одного Client
на другого Client:
def move(params) {
Sale.executeUpdate("update Sale s set s.client = :cardRight where
s.client = :cardLeft", [cardRight: cardRight, cardLeft: cardLeft])
}
Если после выполнения метода сделать так:
def cardLeft = Client.findByBarcode(barcode1)
def cardRight = Client.findByBarcode(barcode2)
то в cardLeft и cardRight по прежнему старые связи на Sale. И только
после повторного запуска кода можно увидеть что данные обновились. Что
это проделки кеша? Как с этим бороться?
--
________________________________
Regards Igor
В вашем случае, если после executeUpdate вы постараетесь сохранить
cardLeft или cardRight, то получите StaleStateException, если конечно
не отключена версионирование этих объектов. Это специальная проверка
целостности, которую делает Hibernate.
Выходов два:
1) Совершать изменения через GORM, т.е. через ваши доменные объекты, и
затем вызывать каждому из них .save, например cardLeft.save(), или
cardLeft.save(flush:true). Во втором случае запись в базу из кэша
произойдет тут же.
2) Поскольку изменения в БД не переносятся автоматически в сессию, то
нужно вызвать refresh для всех объектов, затрагиваемых запросом. Т.е.
cardLeft.refresh(), cardRight.refresh().
25 января 2011 г. 16:36 пользователь Bugdog <drpa...@googlemail.com> написал:
> --
> Вы получили это сообщение, поскольку подписаны на группу ruGrails.
>
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу rugr...@googlegroups.com.
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу rugrails+u...@googlegroups.com.
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/rugrails?hl=ru.
>
>
--
________________________________
Regards Igor
25 января 2011 г. 13:07 пользователь Igor Ussov <ius...@gmail.com> написал:
> --
> Вы получили это сообщение, поскольку подписаны на группу ruGrails.
>
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу rugr...@googlegroups.com.
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу rugrails+u...@googlegroups.com.
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/rugrails?hl=ru.
>
>
--
С уважением,
Дегтярев Андрей mailto:adegt...@gmail.com