为什么mapping.xml和configuration.xml必须在pojo包之外?

时间:2016-03-15 04:04:49

标签: java hibernate jpa

我刚刚开始学习Hibernate,并在各种在线网站上发现了这一点:mapping.xmlconfig.xml必须在pojo包之外定义?

为什么会这样?

JPA和Hibernate之间的区别是什么?我通过网络搜索并根据我的说法,hibernate只是JPA的一个实现。你可以纠正我吗。

1 个答案:

答案 0 :(得分:1)

  

我刚刚开始学习Hibernate,并在各种在线网站上发现了这一点:必须在pojo包之外定义mapping.xml和config.xml?

您可以随时添加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文件夹的根目录中查找资源,或classes的{​​{1}}文件夹。构建之后的war文件夹(例如,由Maven复制)在构建或resources文件夹的根目录中。

如果您指定

classes

类加载器将尝试在new Configuration() .configure("/some/pojo/hibernate.cfg.xml").buildsessionFactory(); 包中查找资源。在这种情况下,Hibernate会删除前导some.pojo,因为通过类加载器进行加载时,前导/不正确。所以你也可以使用下面的代码

/

new Configuration() .configure("some/pojo/hibernate.cfg.xml").buildsessionFactory(); 资源的其他路径的相同规则。

  

JPA和Hibernate之间的区别是什么?我通过网络搜索并根据我的说法,hibernate只是JPA的一个实现。你可以纠正我吗。

是的,Hibernate是JPA的一个实现。但还有一件事。如果您使用xml,则可以认为您没有使用SessionFactory。但同时您使用JPA注释(JPA作为示例)。当您使用@OneToMany时 - 您完全使用EntityManager