2011-09-19 62 views
3

我是JPA初學者,我實際上在努力學習這個API的基礎知識,我的問題是;將註釋應用到字段並將其應用於其獲取方有區別嗎?我應該在哪裏應用JPA註釋,獲取者或字段?

+0

不完全確定如果一個比另一個更好,但傳統上我基於hibernate的代碼曾經在getter上,但是使用JPA包括Hibernate JPA的實現我在字段上看到了更多。 – Shahzeb

+0

我實際上在使用德比嵌入式學習,並計劃在未來使用德比客戶端/服務器驅動程序,所以我不知道您的答案是否適用於德比? –

回答

2

正如其他人所說的,Field和Property訪問之間是有區別的。字段表示持久性提供者的直接訪問,Property(方法訪問)表示使用您選擇的getter/setter來訪問數據。

我建議從字段訪問開始,因爲在我的經驗中,這對於新用戶來說更容易/更安全。財產訪問可能非常有用,並且可能會被一些人所喜歡,但如果您不小心(由於getter和setter可能有其他行爲),它也會導致問題。所以通常情況下,除非您有理由使用Property訪問,否則最好使用Field訪問作爲初學者。

如果您剛剛開始使用JPA,我還建議您選擇由Mike Keith和Merrick Schincariol編寫的Pro JPA 2副本。它涵蓋了這個以及許多其他相關主題。

+0

感謝您的提示。我正在發現這本書,它看起來正是我期待的! –

3

我沒有一個很好的JPA參考資料,但是如果您使用Hibernate,在the Hibernate Annotations reference中有關於此選項的一些註釋。它說:

根據是否註釋字段或方法,Hibernate使用的訪問類型將是字段或屬性。 EJB3規範要求您對將要訪問的元素類型聲明註釋,例如,如果使用屬性訪問,則使用getter方法;如果使用字段訪問,則使用該字段。應該避免在兩個字段和方法中混合註釋。 Hibernate將猜測來自@Id或@EmbeddedId位置的訪問類型。

Hibernate使用反射來訪問值,這個選擇將決定它是調用getter和setters還是使用直接字段訪問。

哪個選擇實際上更好是有爭議的,並且可能會有所不同,這取決於您的工作是否超出了獲取和設置者中明顯獲取和設置字段的範圍。

+0

我實際上是在使用德比嵌入式在獨立應用程序(J2SE)中學習,並計劃在將來使用德比客戶端/服務器驅動程序,那麼這個答案是否適用於德比呢? 順便說一下,我做出了不錯的選擇?我的意思是哪個比德比或冬眠更好? –

+0

我忘了告訴你,我使用的jpa實現是eclipselink。
還有一個問題,我在教程中多次看到「屬性」這個術語,我不明白它代表什麼意思,它只是表示getter? –

相關問題