[英]Why the mapping.xml and configuration.xml has to be outside the pojo package?
我剛剛開始學習 Hibernate,並在各種在線站點中發現了這一點: mapping.xml
和config.xml
必須在 pojo 包之外定義?
為什么呢?
還有 JPA 和 Hibernate 之間的區別是什么。 我通過網絡搜索,據我所知,hibernate 只是 JPA 的實現之一。 你能糾正我嗎。
我剛剛開始學習 Hibernate,並在各種在線站點中發現了這一點:mapping.xml 和 config.xml 必須在 pojo 包之外定義?
您可以隨時放置xml
配置。 舉個例子
SessionFactory factory = new Configuration().configure().buildsessionFactory();
從默認的hibernate.cfg.xml
配置會話工廠。 它與
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml").buildsessionFactory();
那么為什么在這種情況下hibernate.cfg.xml
應該在源文件夾(或resources
文件夾)的根目錄中?
Hibernate 嘗試通過類加載器加載hibernate.cfg.xml
InputStream stream = classLoader.getResourceAsStream( "hibernate.cfg.xml" );
如果您只指定一個沒有路徑的名稱( "hibernate.cfg.xml"
),類加載器將嘗試在已編譯源文件夾的根目錄中查找資源 - bin
或build
文件夾,或war
的classes
文件夾。 構建后的resources
文件夾被復制(例如,通過 Maven)在構建或classes
文件夾的根目錄中。
如果你指定
new Configuration()
.configure("/some/pojo/hibernate.cfg.xml").buildsessionFactory();
類加載器將嘗試在some.pojo
包中查找資源。 在這種情況下,Hibernate 刪除了前導/
,因為對於通過類加載器加載的前導/
是不正確的。 所以你也可以使用下面的代碼
new Configuration()
.configure("some/pojo/hibernate.cfg.xml").buildsessionFactory();
xml
資源的其他路徑的規則相同。
還有 JPA 和 Hibernate 之間的區別是什么。 我通過網絡搜索,據我所知,hibernate 只是 JPA 的實現之一。 你能糾正我嗎。
是的,Hibernate 是 JPA 的一個實現。 但還有一件事。 如果您使用SessionFactory
您可以認為您沒有使用JPA
。 但同時您使用 JPA 注釋(例如@OneToMany
)。 當您使用EntityManager
— 您完全使用JPA
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.