2016-02-18 27 views
0

我知道這是可以通過的版本設置爲false完全停用版本:休眠:停用列版本更新一個專用的保存

class Book { 
    … 
    static mapping = { 
     version false 
    } 
} 

但有可能停用它僅適用於特定的情況下?

class Book { 
    String author 
} 

當前行爲

def BookInstance = Book.get(1) 
println "version $BookInstance.version" //version 1 
BookInstance.author = 'John' 
BookInstance.save(flush:true) 
println "version $BookInstance.version" //version 2 

具體情況

def BookInstance = Book.get(1) 
println "version $BookInstance.version" //version 1 
//Do something to deactivate the update version 
BookInstance.author = 'John' 
BookInstance.save(flush:true) 
println "version $BookInstance.version" //version 1 

回答

0

我想你應該尋找alternative locking休眠:

你的應用程序從改變由 休眠設置的版本號禁止的。人爲地增加版本號,請參閱Hibernate 實體管理器引用文檔中的 文檔屬性LockModeType.OPTIMISTIC_FORCE_INCREMENTLockModeType.PESSIMISTIC_FORCE_INCREMENT檢查。

如果由數據庫生成的版本號,如一個觸發器, 使用註釋@ org.hibernate.annotations.Generated(GenerationTime.ALWAYS)

1

我從來沒有見過一個選項來暫時禁用樂觀鎖定。

如果這是一個選項,您可以執行本地更新:

首先注入的SessionFactory到服務或控制器

def sessionFactory 

然後裏面你的方法做這樣的事情:

def sql = new Sql(sessionFactory.currentSession) 
sql.execute("update BOOK set AUTHOR = 'john' where id = 1") 

(我現在無法檢查語法,但它可能會工作)