簡體   English   中英

為什么 mapping.xml 和 configuration.xml 必須在 pojo 包之外?

[英]Why the mapping.xml and configuration.xml has to be outside the pojo package?

我剛剛開始學習 Hibernate,並在各種在線站點中發現了這一點: mapping.xmlconfig.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" ),類加載器將嘗試在已編譯源文件夾的根目錄中查找資源 - binbuild文件夾,或warclasses文件夾。 構建后的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM