我正在创建很多对象,我试图获得一些性能提升。目前我有一个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。我对此的唯一想法是我可以急切地加载作者对象。
答案 0 :(得分:3)
这是你最好的选择:
newBook.author = Author.load(oldBook.authorId)
这利用了动态fooId
属性,该属性不会触发书籍Author
实例的加载。使用load()
方法为Author
创建仅存储id
值的代理,只要访问id
,就不会有数据库点击以完全加载实例。这基本上使代理成为FK值的包装。