java - 资源 : net/codejava/spring/model/User. hbm.xml 未找到 - Spring 和 Hibernate 配置错误

标签 java xml spring hibernate spring-mvc

我下载了一个教程项目,试图让 Spring 和 Hibernate 正常工作。但是,在服务器上运行它后,我收到以下消息:

调用 init 方法失败;嵌套异常是 org.hibernate.MappingNotFoundException:资源:net/codejava/spring/model/User.hbm.xml 未找到

这是我的项目结构:

enter image description here

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>        
  <session-factory>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>  
    <mapping resource="net/codejava/spring/model/User.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

user.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.codejava.spring.model">
    <class name="User" table="users">
        <id name="id" column="user_id">
            <generator class="native"/>
        </id>
        <property name="username" column="username" />
        <property name="password" column="password" />
        <property name="email" column="email" />
    </class>    
</hibernate-mapping>

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <mvc:annotation-driven />

    <mvc:resources mapping="/resources/**" location="/resources/" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <context:component-scan base-package="net.codejava.spring" />

    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://domain:3306/databaseHere"/>
        <property name="username" value="insertUserHere"/>
        <property name="password" value="insertPassHere"/>
    </bean> 

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </bean>

    <tx:annotation-driven />
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="userDao" class="net.codejava.spring.dao.UserDAOImpl">
        <constructor-arg>
            <ref bean="sessionFactory" />
        </constructor-arg>
    </bean>     
</beans>

对于出了什么问题有什么想法吗?

最佳答案

您有一个 maven 项目,因此 User.hbm.xml 应该位于 src/main/resources/ 内,而不是 src/main/java

当你构建一个maven项目时,它会编译src/main/java中存在的.java文件,并且不会考虑存在于src/main/java中的任何其他文件这个目录。所以maven项目有一个文件夹结构src/main/resources,你可以在其中放置所有的配置文件,如.xml,.properties等。所以当你构建maven项目时然后它会编译 src/main/resources 中的所有 java 文件并将 .class 文件放入类路径中,maven 也会复制 src/中的所有资源main/resources 并将它们放在类路径中。因此,当您运行应用程序时,配置文件也将在类路径中可用。

但是,如果您只是将配置文件放在 src/main/java 中,那么 maven 将忽略它们,因此它们在类路径中不可用。

但是,如果您正在处理的项目是一个简单的 java 项目而不是 Maven 项目,那么即使您的配置文件位于 src/main/java< 中,您问题中提到的代码设置也将正常工作,不会出现任何问题。希望这个解释有帮助。

为了确保 Maven 项目正确构建,您可以通过打开目录 target/classes/ 以及配置文件的路径进行验证。

因此,为了总结所有这些信息,您需要执行以下操作:

/src/main/resources 中创建一个模仿 /src/main/java 中的包结构 - 即,创建 net. codejava.spring.model 包在 /src/main/resources 中,并将 User.hbm.xml 放入其中。运行 Maven clean package (或其他构建目标)命令后,User.hbm.xml 文件将位于正确的位置(图中未显示)如下) - /target/SpringMvcHibernateXML-1.0.0-BUILD-SNAPSHOT/WEB-INF/classes/net/codejava/spring/model/User.hbm.xml

最终,在 Maven 中构建后,项目应如下所示:

enter image description here

关于java - 资源 : net/codejava/spring/model/User. hbm.xml 未找到 - Spring 和 Hibernate 配置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26857086/

相关文章:

java - 在查找方法中使用表达式

java - 涉及继承和泛型的 Java 泛型的用处是什么 extends self

java - 网格停在 10 x 50 而不是 50 x 50

javascript - 不存在的 XML 节点破坏了我的脚本

c# - 如何使用 C# 从 XML 中提取标签到 XLS

spring - 从 Spring IO 下载/导入所有依赖项

java - SecureRandom 的创建很慢,即使在 Java 8 中也是如此

java - 使用 querydsl 模拟数据库查询 - 可选问题

java - XML声明中的以下 "version"必须是带引号的字符串

python - 使用 Python 将复杂的 XML 解析为 CSV