【问题标题】:SpringMVC3 integate with Hibernate4SpringMVC3 与 Hibernate4 集成
【发布时间】:2012-11-09 10:32:56
【问题描述】:

说明:

  1. 设置一个基于 SpringMVC 的 Java EE 项目。
  2. 运行项目,运行良好
  3. 添加 Hibernate4 框架库支持。

问题,异常

1)我在SpringMVC配置文件中添加'dataSource' bean后,启动时总是抛出。

来自 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml] 的 XML 文档中的第 45 行无效;嵌套异常是 org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: 匹配通配符是严格的,但找不到元素 'tx:annotation-driven' 的声明。

2)我提到了The matching wildcard is strict, but no declaration can be found for element 'tx:annotation-driven'

还是同样的错误。

SpringMVC 配置 XML 文件

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
    <property name="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=test" />
    <property name="username" value="root" />
    <property name="password" value="123edkx" />
</bean>

<mvc:resources mapping="/resources/**" location="/resources/" />
<!--HandlerMapping-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<!--HandlerAdapter-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

<!--ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/Views/" />
    <property name="suffix" value=".jsp" />
</bean>

<!--Controller -->
<bean class="com.annotation.controllers.Test" />
<bean class="com.annotation.controllers.LogicController" />

问题:

有人知道如何解决这个问题吗?或者建议一些关于 SpringMVC3.x 与 Hibernate 4 的集成教程?

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                       http://www.springframework.org/schema/mvc
                       http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
                       http://www.springframework.org/schema/tx
                       http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
    <property name="url" value="jdbc:sqlserver://localhost:1443;DatabaseName=beta_nl" />
    <property name="username" value="root" />
    <property name="password" value="12rekasQL" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <!--<property name="packagesToScan" value="com.vo" />-->
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingLocations" value="classpath:com/vo/*.hbm.xml"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<mvc:resources mapping="/resources/**" location="/resources/" />
<!--HandlerMapping-->
<!--<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<!--HandlerAdapter-->
<!--<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

<!--ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/Views/" />
    <property name="suffix" value=".jsp" />
</bean>

<!--Controller -->
<bean class="com.annotation.controllers.Test" />
<bean class="com.annotation.controllers.LogicController" />

【问题讨论】:

    标签: spring hibernate


    【解决方案1】:

    我认为是您没有将 xsd 添加到配置文件的开头。 下面是您将使用的 xsd 和定义。 xmlns:tx="http://www.springframework.org/schema/tx" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"。如果你想使用 tx 注解,你还应该配置一个事务管理器。

    【讨论】:

    【解决方案2】:

    我最近使用了http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/,它的配置工作得很好。

    请发布完整的配置,以及命名空间声明等。

    更新:请检查是否存在 xsi 命名空间声明

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    

    【讨论】:

    • 完整配置已经更新,但是没有出现.. 不知道为什么。
    • @user1837485 如果您使用的是 Eclipse,请考虑切换到 SpringSource Tool Suite - 它具有在 Spring 配置中编辑命名空间的内置工具。
    • @user1837485 你也错过了xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    • 感谢您的编辑。实际上我正在使用 intellij IEDA 创建该项目,是否有可能我错过了一些导致该问题的罐子?那个xml配置是正确的吧?
    • @user1837485 你的xml配置中有xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"吗?
    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 2014-06-21
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多