我正在创建很多对象,并试图提高性能。目前,我有一个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值的包装器。