2013-12-16 51 views
3

JPA 2.1規範說:所有JPA實體類方法都不是最終的嗎?

實體類一定不能是最終的。實體類的方法或持久化實例變量可能是最終的。

是否「沒有辦法」的真正含義是每一個方法 - privatestaticprotected,非國有變化等,在實體類?或者,這是否應該表明只有注有@Access(AccessType.PROPERTY)的方法才被禁止爲final

我知道爲什麼實體類不能爲final,我理解爲什麼實體類的持久實例變量不能爲final。我也明白爲什麼持久性屬性訪問器和增變器不能是final

我不明白爲什麼所有其他方法(那些操縱transient領域,例如,或者是無狀態的,或static,或private)不能final。我可以推測的最好的事情是,規範想要爲任何地方的字節碼注入敞開大門 - 例如,也許我的無狀態方法調用getter需要重寫該調用以調用某種類型的JPA提供程序注入方法。

當然這個限制使得難以重用實體類從其他地方作爲構建塊,因爲其中一些可能具有final方法,但是以其他任何方式適合用於擴充orm.xml並因此用於轉換爲JPA實體。

回答

0

我認爲這只是一個壞的問題的表述,這意味着它不是每個方法。

由於靜態方法沒有綁定到特定的實體實例,這意味着它將是非常愚蠢的改變/控制該靜態方法的行爲。想象一下,何時從與持久性無關的上下文中調用它。所以這就是爲什麼我認爲這是一個公式錯誤。

除了accesors/mutators之外的其他方法相關,我認爲最好不要使用它們,因爲找到一個方法是否訪問持久數據非常複雜。如果該方法是私有的,那麼這仍然是一個問題,因爲您可以用反射來調用它。另外,據我記憶,我在JPA 2.0中發現了另一個地方,它是模糊的,並且我的測試顯示瞭如何解釋它。

PS:當然這只是我的看法,並不是基於任何文章或官方文檔。

相關問題