我是JPA初學者,我實際上在努力學習這個API的基礎知識,我的問題是;將註釋應用到字段並將其應用於其獲取方有區別嗎?我應該在哪裏應用JPA註釋,獲取者或字段?
回答
正如其他人所說的,Field和Property訪問之間是有區別的。字段表示持久性提供者的直接訪問,Property(方法訪問)表示使用您選擇的getter/setter來訪問數據。
我建議從字段訪問開始,因爲在我的經驗中,這對於新用戶來說更容易/更安全。財產訪問可能非常有用,並且可能會被一些人所喜歡,但如果您不小心(由於getter和setter可能有其他行爲),它也會導致問題。所以通常情況下,除非您有理由使用Property訪問,否則最好使用Field訪問作爲初學者。
如果您剛剛開始使用JPA,我還建議您選擇由Mike Keith和Merrick Schincariol編寫的Pro JPA 2副本。它涵蓋了這個以及許多其他相關主題。
感謝您的提示。我正在發現這本書,它看起來正是我期待的! –
我沒有一個很好的JPA參考資料,但是如果您使用Hibernate,在the Hibernate Annotations reference中有關於此選項的一些註釋。它說:
根據是否註釋字段或方法,Hibernate使用的訪問類型將是字段或屬性。 EJB3規範要求您對將要訪問的元素類型聲明註釋,例如,如果使用屬性訪問,則使用getter方法;如果使用字段訪問,則使用該字段。應該避免在兩個字段和方法中混合註釋。 Hibernate將猜測來自@Id或@EmbeddedId位置的訪問類型。
Hibernate使用反射來訪問值,這個選擇將決定它是調用getter和setters還是使用直接字段訪問。
哪個選擇實際上更好是有爭議的,並且可能會有所不同,這取決於您的工作是否超出了獲取和設置者中明顯獲取和設置字段的範圍。
我實際上是在使用德比嵌入式在獨立應用程序(J2SE)中學習,並計劃在將來使用德比客戶端/服務器驅動程序,那麼這個答案是否適用於德比呢? 順便說一下,我做出了不錯的選擇?我的意思是哪個比德比或冬眠更好? –
我忘了告訴你,我使用的jpa實現是eclipselink。
還有一個問題,我在教程中多次看到「屬性」這個術語,我不明白它代表什麼意思,它只是表示getter? –
- 1. 我應該在哪裏放置字段/方法註釋?
- 2. @Autowired註釋應該放在哪裏 - 屬性或方法?
- 3. 我應該在哪裏放置@EnableAsync註釋
- 4. 我應該在哪裏註銷我的視圖中的註冊接收者?
- 5. 我應該在哪裏取消註冊UWP Application.Current.Suspending事件?
- 6. 我們應該在哪裏計算字段?
- 7. 我應該在哪裏存儲表單字段「提示」數據?
- 8. 我應該在哪裏使用OnActivityResult?
- 9. PHP - 我應該在哪裏調用ini_set?
- 10. 我應該在哪裏使用angular.bind?
- 11. 我應該在哪裏調用TDSSessionManager.Instance.AddSessionEvent?
- 12. 我應該在哪裏使用protobuf
- 13. 我應該在哪裏使用XSP.endAjaxLoading()?
- 14. 我應該去哪裏?
- 15. 我應該在哪裏放置輸出字段描述,控制器或模型?
- 16. JavaScript - 我應該在哪裏放置「var」以獲取特定值
- 17. 我應該在哪裏把我的UpdatePanel
- 18. JPA 2.0中的JPA 2.0字段註釋與方法註釋
- 19. 我應該在哪裏尋找消費者密鑰和祕密以註冊OAuth?
- 20. 我應該在Rails應用程序中索引哪些字段?
- 21. 應該在哪裏應用AsNoTracking?
- 22. JPA:我應該如何註釋這個Map集合?
- 23. 我應該在哪裏放置在phabricator
- 24. 我應該在哪裏放置在FBConnect
- 25. 應該在哪裏捕獲異常?
- 26. 我應該在哪裏選擇傳遞引用或傳遞值?
- 27. JPA:我應該使用哪個?基本(可選)或列(可空)?
- 28. 我應該在哪裏部署我的應用程序?
- 29. 我應該在哪裏聲明該代碼中的字段才能編譯?
- 30. 我應該在哪裏放AutoLayout代碼?
不完全確定如果一個比另一個更好,但傳統上我基於hibernate的代碼曾經在getter上,但是使用JPA包括Hibernate JPA的實現我在字段上看到了更多。 – Shahzeb
我實際上在使用德比嵌入式學習,並計劃在未來使用德比客戶端/服務器驅動程序,所以我不知道您的答案是否適用於德比? –