无法自动装配字段:Spring-Hibernate [英] Could not autowire field: Spring-Hibernate

查看:214
本文介绍了无法自动装配字段:Spring-Hibernate的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是我在尝试将Hibernate与Spring MVC项目集成并添加Autowired功能时遇到的异常。


$ b 异常: $ b


SEVERE:发送上下文初始化事件给侦听器的例外

的实例org.springframework.web。 context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException:错误
创建名为'userBOImpl'的bean:注入自动装配的
依赖关系fai led;嵌套异常是
org.springframework.beans.factory.BeanCreationException:不能
autowire字段:private com.inspireme.dao.UserDA O
com.inspireme.boimpl.UserBOImpl.userDAO;嵌套的异常是
org.springframework.beans.factory.BeanCreationException:错误
创建名为'userDAOImpl'的bean:注入自动装配的
依赖关系失败;嵌套异常是
org.springframework.beans.factory.BeanCreationExcep tion:不能
autowire字段:private org.hibernate.SessionFactory
com.inspireme.daoimpl.UserDAOImpl.sessionFactory;嵌套异常是
j ava.lang.NoClassDefFoundError:Lorg / hibernate / cache / CacheProvider;

分派器 - 小服务程序.xml

 <! - 启用基于注释的配置 - > 
< context:annotation-config />

<! - 基本套餐 - >
< context:component-scan base-package =com.inspireme。 />

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

<! - 数据库属性配置 - 开始 - >
class =org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
p:location =WEB-INF / classes / properties / database.properties >
< / bean>
<! - 数据库属性配置 - END - >

<! - 使用可用凭证访问数据库 - START - >
< bean id =dataSource
class =org.apache.commons.dbcp.BasicDataSourcedestroy-method =close
p:driverClassName =$ {jdbc.driverClassName}
p:url =$ {jdbc.databaseurl}p:username =$ {jdbc.username}
p:password =$ {jdbc.password}>
< / bean>
<! - 使用可用凭据访问数据库 - END - >

<! - 休眠设置 - 开始 - >
< bean id =sessionFactory
class =org.springframework.orm.hibernate3.LocalSessionFactoryBean>
< property name =dataSourceref =dataSource>< / property>
< property name =configLocation>
< value> classpath:hibernate.cfg.xml< / value>
< / property>
< property name =configurationClass>
< value> org.hibernate.cfg.AnnotationConfiguration< / value>
< / property>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> $ {jdbc.dialect}< / prop>
< prop key =hibernate.show_sql> true< / prop>
< /道具>
< / property>
< / bean>
<! - Hibernate Settings - END - >

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

< mvc:annotation-driven />

< tx:annotation-driven />

<! - 自动布线的开始 - >>
< bean id =userBOclass =com.inspireme.boimpl.UserBOImpl>< / bean>
< bean id =userDAOclass =com.inspireme.daoimpl.UserDAOImpl>< / bean>
<! - 自动布线的bean结束 - >

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

hibernate.cfg.xml

 <?xml version ='1.0'encoding ='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC
- // Hibernate / Hibernate配置DTD // EN
http://hibernate.sourceforge.net/hibernate-configuration-3.0。 DTD>

< hibernate-configuration>
< session-factory>
< mapping class =com.inspireme.dto.UserDTO>< / mapping>
< / session-factory>
< / hibernate-configuration>

控制器类

  package com.inspireme.controller; 

@Controller
@RequestMapping(/)
public class InspireMeController {

public ApplicationContext applicationContext;

private static final Logger LOGGER = Logger.getLogger(InspireMeController.class);

@Autowired
私人的UserBO userBO;

服务等级:

  package com.inspireme.boimpl; 

@Service
public class UserBOImpl implements UserBO {

private static final Logger LOGGER = Logger.getLogger(UserBOImpl.class);

@Autowired
private UserDAO userDAO;

存储库类

  package com.inspireme.daoimpl; 

@Repository
public class UserDAOImpl implements UserDAO {

@Autowired
private SessionFactory sessionFactory;

为什么我得到这个异常,因为所有的3个bean都是在dispatcher-servlet.xml中定义的文件。



我指的是以下 source 来整合Hibernate。

解决方案

java.lang.NoClassDefFoundError:Lorg / hibernate / cache / CacheProvider 缺少jar。


你是部分正确的..有一个瓶子不匹配..如此处所述.. howtodoinjava.com/2013/12/08/...。但添加后,我得到一个错误,WEB-INF / inspireme-dispatcher-servlet.xml:调用init方法失败;嵌套异常是java.io.FileNotFoundException:类路径esource [hibernate.cfg.xml]不能被解析为URL,因为它不存在。


不完全确定构建如何在您的案例中工作但试试 classpath:/hibernate/hibernate.cfg.xml classpath:hibernate / hibernate.cfg.xml 。或者在部署的战争中更好地检查该文件在 WEB-INF / classes 内的位置。


Following is the exception which I am getting while I am trying to integrate Hibernate with my Spring MVC project and add Autowired feature.

Exception:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userBOImpl': Injection of autowired dependencies fai led; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.inspireme.dao.UserDA O com.inspireme.boimpl.UserBOImpl.userDAO; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDAOImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationExcep tion: Could not autowire field: private org.hibernate.SessionFactory com.inspireme.daoimpl.UserDAOImpl.sessionFactory; nested exception is j ava.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;

Dispatcher-servlet.xml

 <!-- Enable Annotation based configuration -->
 <context:annotation-config />

 <!-- Base package -->
 <context:component-scan base-package="com.inspireme." />

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

 <!-- Database properties configuration - START -->
 <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
    p:location="WEB-INF/classes/properties/database.properties">
 </bean>
 <!-- Database properties configuration - END -->

 <!-- Accessing DB with available credentials - START -->
 <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}"
    p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
    p:password="${jdbc.password}">
 </bean>
 <!-- Accessing DB with available credentials - END -->

<!-- Hibernate Settings - START -->
    <bean id="sessionFactory"
       class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       <property name="dataSource" ref="dataSource"></property>
       <property name="configLocation">
           <value>classpath:hibernate.cfg.xml</value>
       </property>
       <property name="configurationClass">
           <value>org.hibernate.cfg.AnnotationConfiguration</value>
       </property>
       <property name="hibernateProperties">
           <props>
               <prop key="hibernate.dialect">${jdbc.dialect}</prop>
               <prop key="hibernate.show_sql">true</prop>
           </props>
       </property>
   </bean>
<!-- Hibernate Settings - END -->

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

 <mvc:annotation-driven/>

 <tx:annotation-driven />

 <!-- Start of Autowired beans -->
 <bean id="userBO" class="com.inspireme.boimpl.UserBOImpl"></bean>
 <bean id="userDAO" class="com.inspireme.daoimpl.UserDAOImpl"></bean>
 <!-- End of Autowired beans -->

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

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping class="com.inspireme.dto.UserDTO"></mapping>
    </session-factory>
</hibernate-configuration>

Controller class

package com.inspireme.controller;

@Controller
@RequestMapping("/")
public class InspireMeController {

    public ApplicationContext applicationContext;

    private static final Logger LOGGER = Logger.getLogger(InspireMeController.class);

    @Autowired
    private UserBO userBO;

Service class:

package com.inspireme.boimpl;

@Service
public class UserBOImpl implements UserBO {

    private static final Logger LOGGER = Logger.getLogger(UserBOImpl.class);

    @Autowired
    private UserDAO userDAO;

Repository class

package com.inspireme.daoimpl;

@Repository
public class UserDAOImpl implements UserDAO {

    @Autowired
    private SessionFactory sessionFactory;

Why am I getting this exception since all the 3 beans, are defined in the dispatcher-servlet.xml file.

I am referring the following source to integrate Hibernate.

解决方案

java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider jar is missing.

You are partially correct .. there is a jar mismatch .. as stated here .. howtodoinjava.com/2013/12/08/…. But after adding this I am getting an error, "WEB-INF/inspireme-dispatcher-servlet.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: class path esource [hibernate.cfg.xml] cannot be resolved to URL because it does not exist". Please look at my folder structure and let me know how to give the path here.

Not exactly sure how the build works in your case but try classpath:/hibernate/hibernate.cfg.xml or classpath:hibernate/hibernate.cfg.xml. Or better check where exactly that file is within WEB-INF/classes in the deployed war.

这篇关于无法自动装配字段:Spring-Hibernate的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆