2013-02-16 3 views
1

Я использую Grails, который использует Hibernate для сопротивления под капотом.Должен ли я полагаться на грязную проверку?

Мое задание - это хорошая практика полагаться на грязную проверку или я всегда должен явным образом называть метод save() для объектов каждый раз, когда я их меняю?

UPD: Этот вопрос НЕ о грязной механизме проверки, этот вопрос касается его надежности. То есть, когда я хочу, чтобы обновить объект:

def user = User.get(1) 
user.name = 'new name' 
user.save() //optional 

Я ommit последней строки, Hibernate обнаружит изменение самого по себе и упорствовать это, но я могу быть уверен на 100%?

Вы всегда явно вызываете save() после обновлений в своих проектах?

+0

Похоже, вам нужно прочитать, что означает сохранение, когда вы используете Hibernate. –

ответ

0

Все инсерции сущности & updations были сохранены не с помощью Session.save() & Session.saveOrUpdate()

До тех пор, пока вы не срабатывали сохранение с в session, они не не будут сохранить в DataBase больше.

После того, как вы сохранили объект, и все же вы изменяете объект, на экране появится Dirty checking Hibernate.

В dirty checking, hibernate автоматически определяет, был ли объект изменен (или) нет и нуждается в обновлении. Пока объект находится в persistent state, то есть , привязанный к определенному сеансу (org.hibernate.Session). Hibernate контролирует любые изменения объектов и выполняет sql.

0

Вот некоторые исследования по грязной проверки

  1. Fush сессия сбросит происхождения состояние

    Защиту пациента = Patient.get (идентификатор)

    patient.name = 'ххх'

    patient.isDirty() -> true

    patient.save()

    patient.isDirty() -> истинный

    patient.save (вровень: правда)

    patient.isDirty() -> ложь !! флеш сбросит происхождения государства

  2. HQL запрос будет также сброса происхождения насытить

    Защиту пациента = Patient.get (ID)

    patient.name = 'ххх'

    patient.isDirty () -> истинный

    Patient.findByXXXX()

    пациента.isDirty() -> false

+0

[grails-issue-not-processing-by-flush-root-cause] (http://naleid.com/blog/2010/11/21/grails-issue-not-processed-by-flush-root-causes) –

Смежные вопросы