2013-02-16 73 views
1

我用Grails的,它使用Hibernate持久性的引擎蓋下。我應該依靠髒檢查嗎?

我的問題是,如果它是一個很好的做法,依靠髒檢查,或者我應該總是明確地調用save()方法實體每次我改變它們?

UPD:這個問題不是關於骯髒的檢查機制,這個問題是關於它的可靠性。也就是說,當我想更新實體:

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

我可以ommit最後一行,Hibernate會檢測自身的變化和堅持,但我可以100%肯定嗎?

你永遠地調用在你的項目更新後,保存()?

+0

這聽起來像你需要閱讀什麼保存意味着當你使用Hibernate。 – 2013-02-16 18:59:37

回答

0

所有實體插入& updations使用Session.save() & Session.saveOrUpdate()

除非,除非你火與在session保存,他們不是不打算在DataBase被保存了保存。

一旦你保存的對象,仍然要修改的對象Hibernate的Dirty checking將進入畫面。

dirty checking,hibernate自動檢測對象是否被修改(或)不需要更新。只要對象是在persistent state即 綁定到特定會話(的org.hibernate.Session)。 Hibernate監視對象的任何更改並執行sql。

0

這裏是髒檢查一些研究

  1. Fush會議將重置偏多狀態

    高清病人= Patient.get(ID)

    patient.name = 'XXX'

    patient.isDirty() - > true

    patient.save()

    patient.isDirty() - >真

    patient.save(沖洗:真)

    patient.isDirty() - >假!!沖洗將重置原點狀態

  2. HQL查詢也將復位原點SATE

    DEF患者= Patient.get(ID)

    patient.name = 'xxx' 的

    patient.isDirty( ) - >真

    Patient.findByXXXX()

    患者。isDirty() - > false

+0

[grails-issue-not-processed-by-flush-root-causes](http://naleid.com/blog/2010/11/21/grails-issue-not-processed-by-flush-root-causes ) – 2016-12-01 01:59:13

相關問題