我刚刚开始学习Hibernate,并在各种在线网站上发现了这一点:mapping.xml
和config.xml
必须在pojo包之外定义?
为什么会这样?
JPA和Hibernate之间的区别是什么?我通过网络搜索并根据我的说法,hibernate只是JPA的一个实现。你可以纠正我吗。
答案 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"
),则类加载器将尝试在已编译的源文件夹 - bin
或build
文件夹的根目录中查找资源,或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
。