grails调用hibernate更新

grails调用hibernate更新,grails,Grails,我还有一个问题要问 有没有办法避免调用def bookInstance.get(bookList.id[it])?例如,我仍然想覆盖数据库中的exist数据,但我不想从数据库中加载exist数据,所以我调用def bookInstance=new Book()bookInstance.id=XXX bookInstance.save() 这不起作用,因为gorm将其视为一个新对象,是否有任何方法强制更新现有对象?比如调用hibernateSession.update加载实例的成本应该不会太高,因

我还有一个问题要问

有没有办法避免调用def bookInstance.get(bookList.id[it])?例如,我仍然想覆盖数据库中的exist数据,但我不想从数据库中加载exist数据,所以我调用def bookInstance=new Book()bookInstance.id=XXX bookInstance.save()


这不起作用,因为gorm将其视为一个新对象,是否有任何方法强制更新现有对象?比如调用hibernateSession.update

加载实例的成本应该不会太高,因此您可能过早地进行了优化。但是您可以使用
executeUpdate
更新数据,而无需首先检索数据。例如,如果您的Book类如下所示:

class Book {
    String author
    String title
}
Book.executeUpdate(
    'update Book b set b.author=:author, b.title=:title where b.id=:id',
    [author: params.author, title: params.author, id: params.id])
然后您可以像这样更新它:

class Book {
    String author
    String title
}
Book.executeUpdate(
    'update Book b set b.author=:author, b.title=:title where b.id=:id',
    [author: params.author, title: params.author, id: params.id])

我不想加载实例的原因是:当域对象中存在一对多映射时,如果从DB加载,我需要在调用***.properties=params之前清除所有一对多数据。我想为我的团队建立一个通用的基础设施,所以我想删除任何不必要的代码。您的建议很好,但可能会引入更多代码。