Hibernate:停用特定保存的列版本更新

时间:2016-02-18 10:25:28

标签: hibernate grails gorm

我知道可以通过将版本设置为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

2 个答案:

答案 0 :(得分:1)

我从未见过禁用暂时乐观锁定的选项。

如果这是一个选项,您可以执行本机更新:

首先将SessionFactory注入服务或控制器

def sessionFactory

然后在你的方法里面做这样的事情:

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

(我现在无法检查语法,但它可能会起作用)

答案 1 :(得分:0)

我认为你应该在hibernate中寻找alternative locking

  

禁止您的应用程序更改设置的版本号   休眠。要人为增加版本号,请参阅   属性文档 LockModeType.OPTIMISTIC_FORCE_INCREMENT   或者 LockModeType.PESSIMISTIC_FORCE_INCREMENT 检查Hibernate   实体管理器参考文档。

     

如果版本号由数据库生成,例如触发器,   使用注释 @ org.hibernate.annotations.Generated(GenerationTime.ALWAYS)