org.hibernate.boot.MappingNotFoundException:找不到映射(RESOURCE)

时间:2016-05-03 14:01:11

标签: java hibernate

我一直试图用一个小例子来实现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。

我的文件夹结构如下所示

enter image description here

我在Stackoverflow上查看了此错误的所有其他答案,但没有一种方法解决了这个问题。任何帮助都非常感谢。此外,是否有任何方法可以进一步调试到粒度级别?

1 个答案:

答案 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中ClassLoaderbin文件夹根目录中的文件,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

它应该在类路径的根目录中。