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



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

例如

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

如果不必在旧书上查找author对象,那条线可能会更快。理想情况下,这条线看起来更像这样。(请注意,这些实际上不起作用)

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

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

这是您的最佳选择:

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

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

最新更新