我一直试图用一个小例子来实现hibernate。
下面是我的hibernate.config.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/abc
</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">true</property>
<mapping
resource="HibernateExample/src/HibernateExposed/Resource/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
运行代码时出现错误org.hibernate.boot.MappingNotFoundException:找不到映射(RESOURCE)。
我尝试将映射替换为如下
<mapping
resource="Resource/Person.hbm.xml"/>
并且还尝试将映射xml保持在与hibernate.config.xml相同的位置。
<mapping
resource="Person.hbm.xml"/>
在上述任何一种情况下,代码都可以找到我的Person.hbm.xml。
我的文件夹结构如下所示
我在Stackoverflow上查看了此错误的所有其他答案,但没有一种方法解决了这个问题。任何帮助都非常感谢。此外,是否有任何方法可以进一步调试到粒度级别?
答案 0 :(得分:2)
请将1 6 11 16 2 7 12 3 8 13 4 9 14 5 10 15
放在hibernate.cfg.xml
文件夹的根目录中。
并使用
src
Hibernate使用<mapping resource="HibernateExposed/Person.hbm.xml"/>
ClassLoader.getResourceAsStream(resourcePath)
加载所有这些文件 - 是文件的路径
resourcePath
尝试访问IDE中ClassLoader
或bin
文件夹根目录中的文件,build
的根目录或{{1}的根目录对于web应用程序。这些都是类路径的根源。
jar
是Eclipse编译文件的文件夹。 war/WEB-INF/classes/
文件夹的根目录编译到bin
文件夹的根目录。你可以查一下。
例如
src
- bin
configure("hibernate.cfg.xml")
- bin/hibernate.cfg.xml
configure("xxx/hibernate.cfg.xml")
对应bin/xxx/hibernate.cfg.xml
路径应该没有 <mapping resource="HibernateExposed/Person.hbm.xml"/>
的前导bin/HibernateExposed/Person.hbm.xml
。 Hibernate尝试删除前导/
。
这样的路径也是有效的
ClassLoader
更新
您可以指定/
的路径,如果您不想在根目录中
<mapping resource="/HibernateExposed/Person.hbm.xml"/>
如果您使用
hibernate.cfg.xml
它应该在类路径的根目录中。