2014-03-04 38 views

回答

6

異常是很昂貴的,因爲所有額外的堆棧框架,Groovy更是如此。當你觸發或拋出一個預期的異常時,你會產生填充堆棧框架的成本,雖然這不是很昂貴的一個例子,但它會增加生產。看看這篇文章,但要意識到如果Groovy有額外的運行,性能會更糟糕:http://shipilev.net/blog/2014/exceptional-performance/

話雖如此,我可以想到的一個快速方法來觸發缺少行的例外是使用load方法而不是getload永遠不會返回null,它總是返回一個代理,其ID存儲在裏面。只要引用id以外的任何屬性,Hibernate就會進入數據庫並在該行沒有該行時引發異常。

更直接的選擇是將靜態方法添加到您的域類中,該類使用get但對您進行空檢查,例如,

class MyDomainClass { 

    ... 

    static MyDomainClass retrieve(id) { 
     MyDomainClass instance = MyDomainClass.get(id) 
     if (instance == null) { 
     throw new NotGotException(id) 
     } 
     instance 
    } 

    static class NotGotException extends RuntimeException { 
     NotGotException(id) { 
     super("No MyDomainClass found for id $id") 
     } 

     Throwable fillInStackTrace() { 
     return this 
     } 
    } 
} 

這裏我重寫fillInStackTrace什麼也不做,以避免不必要的聚會和不必要的昂貴的成本信息。

相關問題