Grails外键更新 - 性能更新对象

时间:2013-12-06 14:39:47

标签: performance hibernate grails gorm

我正在创建很多对象,我试图获得一些性能提升。目前我有一个gorm对象属性的赋值,如果我可以手动设置外键,我可以获得更好的性能。

例如

def oldBook = Book.findByTitle("Of Mice and Men")
def newBook = new Book()
newBook.author = oldBook.author //This line could be faster

如果不必在oldBook上查找作者对象,那么该行可能会更快。理想情况下,线条看起来更像这样。 (这些实际上并不起作用)

newBook.authorId = oldBook.authorId
// or
newBook.setAuthorId(oldBook.authorId)

grails中有可能是这样的吗?也许它可能但危险。我正在使用版本grails 2.2.1,Hibernate和Oracle。我对此的唯一想法是我可以急切地加载作者对象。

1 个答案:

答案 0 :(得分:3)

这是你最好的选择:

newBook.author = Author.load(oldBook.authorId)

这利用了动态fooId属性,该属性不会触发书籍Author实例的加载。使用load()方法为Author创建仅存储id值的代理,只要访问id,就不会有数据库点击以完全加载实例。这基本上使代理成为FK值的包装。