【问题标题】:Hibernate sessionFactory or Hibernate Template missing缺少 Hibernate sessionFactory 或 Hibernate 模板
【发布时间】:2015-10-01 17:40:17
【问题描述】:

每次更改xml 文件时都会出现此错误。这是我得到的:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'managerExpedBitacora' defined in class path resource [config/spring/manager.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

全栈:

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4728)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
at org.springframework.orm.hibernate4.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:117)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
... 21 more

这是我的manager.xml,仅供参考:

<bean id="managerExpedBitacora" class="es.myCompany.lq.manager.impl.ManagerExpedBitacoraImpl">
             <property name="daoExpedBitacora" ref="daoExpedBitacora"/>  
</bean>

...
<bean id="managerExpedienteLS" class="es.myCompany.lq.manager.impl.ManagerExpedienteLSImpl">
     ....
     <property name="managerExpedBitacora" ref="managerExpedBitacora" />
     ....
</bean>

这是我的daos.xml,只有几行:

<bean id="daoExpedBitacora" class="es.myCompany.lq.dao.impl.DaoExpedBitacoraHbmImpl">
     <property name="sessionFactory" ref="sessionFactory"/>
</bean>

如您所见,我已经注入了 sessionFactory。

还有,applicationContext.xml,邮件部分:

<import resource="classpath:config/spring/properties.xml"/> 
<import resource="classpath:config/spring/utils.xml"/>
<import resource="classpath:config/spring/bbdd.xml"/>
<import resource="classpath:config/spring/daos.xml"/>
<import resource="classpath:config/spring/manager.xml"/>
<import resource="classpath:config/spring/actions.xml"/>

还有,我的一部分DaoExpedBitacoraHbmImpl.java

public class DaoExpedBitacoraHbmImpl extends HibernateDaoSupport implements
    DaoExpedBitacora {
...(methods)
}

而且,HibernateDaoSupport.java,只是其中的一部分。

public class HibernateDaoSupport extends org.springframework.orm.hibernate4.support.HibernateDaoSupport{
....
}

那么,这里有什么问题?

【问题讨论】:

  • 您是否有setSessionFactory 如果有,请确保它正在调用超级设置器。另外从堆栈跟踪 sn-p 判断(请添加完整的堆栈跟踪)您的服务也在扩展 HibernateDaoSupport
  • 你能解释一下你用 DaoExpedBitacoraHbmImpl 方法写的东西吗?
  • 我可以看到您需要 daoExpedBitacora 中的 sessionFactory,但您实际在哪里提供呢?
  • @M. Deinum 它是完整的堆栈跟踪,请参阅我的问题,并感谢您的评论。反正项目上级解决了,下面回答。
  • 感谢大家的评论。 @M。 Deinum 它是完整的堆栈跟踪,请参阅我的问题,我没有 sessionFactory 设置器,它工作正常。没错,我的实现类也在扩展它,这就是它失败的原因。 @Darshan 我在我的DaoExpedBitacoraHbmImpl 中编写了三个方法:insertget 具有相同 bean 的 ID,select 具有另一个关联类的 id,均具有 getHibernateTemplateCriteria。 @Jens Schauder 我在 spring\orm\hibernate4\support\AutoOpenSessionInviewFilter.java 中提供 sessionFactory,它不在这里。

标签: xml spring hibernate


【解决方案1】:

我的项目负责人看了代码,说我的ManagerExpedBitacoraImpl.java,作为服务的实现,不能扩展HibernateDaoSupport.java。这是我没有发布的部分。所以之前是这样的:

public class ManagerExpedBitacoraImpl extends HibernateDaoSupport implements ManagerExpedBitacora {

    DaoExpedBitacora daoExpedBitacora;

    public DaoExpedBitacora getDaoExpedBitacora() {
    return daoExpedBitacora;
    }

    public void setDaoExpedBitacora(DaoExpedBitacora daoExpedBitacora) {
    this.daoExpedBitacora = daoExpedBitacora;
    }
....

应该是这样的:

public class ManagerExpedBitacoraImpl implements
    ManagerExpedBitacora {

    DaoExpedBitacora daoExpedBitacora;

    public DaoExpedBitacora getDaoExpedBitacora() {
    return daoExpedBitacora;
    }

    public void setDaoExpedBitacora(DaoExpedBitacora daoExpedBitacora) {
    this.daoExpedBitacora = daoExpedBitacora;
    }
....

而在其他管理器实现类中,我看不到这部分。一定是一些误点击。所以我删除了这部分,一切都很好。希望我可以帮助其他人。

【讨论】:

  • 嗨! HibernateDaoSupport 和 HibernateTemplate 在 2011 年被弃用 - 你应该使用 @Transactional 和 getCurrentSession stackoverflow.com/questions/5104765/…(当然如果你没有绑定到 Spring 2.5)
  • 是的,我知道,谢谢。我必须研究它,我会的。现在我正在关注以前同事的旧代码。
猜你喜欢
  • 2018-08-20
  • 2011-12-28
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 2015-05-19
相关资源
最近更新 更多