2017-05-30 7 views
0

私は次のコードを実行すると "initメソッドの呼び出しに失敗しました。 'hibernateTemplate'は必須です "私のコードのエラーは何ですか?initメソッドの呼び出しに失敗しました。入れ子にされた例外はjava.lang.IllegalArgumentExceptionです: 'sessionFactory'または 'hibernateTemplate'が必要です

EmployeeDaoImpl.java

@Repository 
public class EmployeeDaoImpl extends AbstractHibernateDao implements EmployeeDao{ 
public Employee getSalaryDetails(Integer empId) 
{ 
    Session session = getSession(); 
    Query query = session.getNamedQuery("getEmpSalaryDtls"); 
    query.setInteger("empId", empId); 
    query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 
    Map map = (Map) query.uniqueResult(); 
    closeSession(session); 
    return map; 
} 

AbstractHibernateDao.java

public abstract class AbstractHibernateDao extends HibernateDaoSupport { 
public Session getSession() {  
    HibernateTemplate template = this.getHibernateTemplate();  
    template.setSessionFactory(getSessionFactory()); 
    return template.getSessionFactory().openSession(); 
} 

エラーメッセージは次のとおりです。

"192.24.0.77" "sourcePrg" 2017-05-30 04:41:14 "org.springframework.web.struts.ContextLoaderPlugIn" "Context initialization failed" 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'EmployeeDaoImpl' defined in file [D:\....\EmployeeDaoImpl.class]: 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:1628) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.web.struts.ContextLoaderPlugIn.createWebApplicationContext(ContextLoaderPlugIn.java:355) ~[spring-struts-3.2.18.RELEASE.jar:3.2.18.RELEASE] 
at org.springframework.web.struts.ContextLoaderPlugIn.initWebApplicationContext(ContextLoaderPlugIn.java:296) ~[spring-struts-3.2.18.RELEASE.jar:3.2.18.RELEASE] 
at org.springframework.web.struts.ContextLoaderPlugIn.init(ContextLoaderPlugIn.java:226) ~[spring-struts-3.2.18.RELEASE.jar:3.2.18.RELEASE] 
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:1158) ~[struts-1.1.jar:1.1] 
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:473) ~[struts-1.1.jar:1.1] 
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:456) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2488) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1162) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1147) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$UpOneLevel.run(CurrentTaskFuture.java:753) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) ~[weblogic.server.merged.jar:12.1.3.0.0] 
at weblogic.work.ExecuteThread.run(ExecuteThread.java:263) ~[weblogic.server.merged.jar:12.1.3.0.0] 

Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required 
at org.springframework.orm.hibernate5.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:117) ~[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44) ~[spring-tx-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE] 

今、私はこのエラーを得た:

"org.springframework.web.struts.ContextLoaderPlugIn" "Context initialization failed" 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'EmployeeServiceImpl': Unsatisfied dependency expressed through field 'EmployeeDao'; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'EmployeeDao' defined in ServletContext resource [/WEB-INF/spring-beans.xml]: Error setting property values; nested exception is 
org.springframework.beans.NotWritablePropertyException: Invalid property 'hibernateTemplate' of bean class [com.temp.EmployeeDaoImpl]: Bean property 'hibernateTemplate' is not writable or has an invalid setter method. 
Does the parameter type of the setter match the return type of the getter? 
+0

スタックトレースは、例外がスローされた正確な関数に導かなければなりません。質問の説明にスタックトレースを追加できますか? 'this.getHibernateTemplate()'が 'null'を返す可能性はありますか?デバッグして 'getSessionFactory()'の値を確認しようとしましたか? – KernelMode

+0

あなたのコードには複数の点で欠陥があり、実際には 'HibernateTemplate' /' HibernateDaoSupport'を回避しようとしています。 ... –

+0

HibernateTemplateを使用しようとしています – Manihtraa

答えて

1

HibernateTemplateの使用は、(約2008年頃だった)コンテキストセッションのサポートを導入したhibernate 3.0.1以降はお勧めできません。今日、あなたはthe plain Hibernate APIに対してDAOを書くことを勧められています。

これでDAOを次のように書き直しました。

public abstract class AbstractHibernateDao { 

    @Autowired 
    private SessionFactory sessionFactory; 

    protected Session getCurrentSession() { 
     return sessionFactory.getCurrentSession(); 
    } 
} 

今、あなたの実際の実装DAO

@Repository 
public class EmployeeDaoImpl extends AbstractHibernateDao implements EmployeeDao{ 
public Employee getSalaryDetails(Integer empId) 
{ 
    Session session = getCurrentSession(); 
    Query query = session.getNamedQuery("getEmpSalaryDtls"); 
    query.setInteger("empId", empId); 
    query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 
    Map map = (Map) query.uniqueResult(); 
    return map; 
} 

ここでの仮定がいくつかあります。

  1. あなたはあなたが@EnableTransactionManagement<tx:annotation-driven />との取引を有効にしている@Transactional
  2. とサービスから実際のトランザクションを持ってHibernateTransactionManager
  3. との適切な取引を設定しています。

このスプリングでは、Sessionの開閉を行いますので、これ以上考えないでください。

+0

サーバの起動中にエラーが発生しました。 – Manihtraa

+0

ここで述べたように**正確に**を行った場合、それは単純に当てはまりません。 'HibernateDaoSupport'(私が明示的に削除したもの)への参照がまだ残っている場合、例外が発生します。 –

+0

私のコードが変更されました。新しいエラーが発生しました。 – Manihtraa

関連する問題