2010-08-07 3 views
2

초보자는 여기를 봄. 봄. hibernae + spring + struts2 프로젝트를 설정하려면 여기에서 튜토리얼을 따라하십시오. http://splinter.com.au/blog/?p=224Spring injection을 통한 질의를 사용하는 Hibernate

쿼리를 준비하고 싶습니다. 나는 그것을 어떻게 해결할 수, Services.java

public class Services { 
    protected SessionFactory sessionFactory; 
    public void setSessionFactory(SessionFactory value) { 
    sessionFactory = value; 
    } 

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

    private Query query = sess().createQuery("...."); 
} 

세션이 주입되지 않는 다음과 같은 예외가 발생합니다 : 그래서 나는 다음과 같은 시도?

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'services' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.dao.Services]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:955) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:901) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:574) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393) 
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310) 
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142) 
    at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461) 
    at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118) 
    at org.jboss.web.deployers.WebModule.start(WebModule.java:97) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) 
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) 
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 
    at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206) 
    at $Proxy38.start(Unknown Source) 
    at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42) 
    at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37) 
    at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) 
    at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) 
    at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) 
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 
    at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:297) 
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) 
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 
    at org.jboss.system.ServiceController.doChange(ServiceController.java:688) 
    at org.jboss.system.ServiceController.start(ServiceController.java:460) 
    at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163) 
    at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99) 
    at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46) 
    at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62) 
    at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50) 
    at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1440) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1158) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1179) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1099) 
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) 
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:782) 
    at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702) 
    at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117) 
    at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70) 
    at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53) 
    at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:403) 
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) 
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) 
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:775) 
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540) 
    at org.jboss.system.server.profileservice.repository.AbstractProfileService.registerProfile(AbstractProfileService.java:308) 
    at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:256) 
    at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461) 
    at org.jboss.Main.boot(Main.java:221) 
    at org.jboss.Main$1.run(Main.java:556) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.dao.Services]: Constructor threw exception; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:71) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:948) 
    ... 82 more 
Caused by: java.lang.NullPointerException 
    at com.dao.Services.sess(Services.java:36) 
    at com.dao.Services.<init>(Services.java:42) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) 
    ... 84 more 

답변

3

Service이 인스턴스화되면 query 필드가 초기화됩니다. 그리고이 시점에서 sessionFactory이 삽입되지 않았으므로 NullPointerException입니다.

실제로 생성 시간이 Service 일 때 Query을 초기화한다는 전체적인 생각은 쿼리가 세션의 수명에 바인딩되어 있으므로별로 의미가 없습니다. Query의 자바 독에서 :

쿼리는 list(), scroll() 또는 iterate()를 호출하여 실행됩니다. 쿼리는 다음 호출에 의해 다시 실행될 수 있습니다. 그러나 수명은 세션의 수명으로 제한됩니다. 즉

, 안 한 번 모두를위한, 각 통화에 대한 Query을 만들어야합니다

setSessionFactory에 쿼리를 인스턴스화 시도
public class Services { 
    protected SessionFactory sessionFactory; 
    public void setSessionFactory(SessionFactory value) { 
     sessionFactory = value; 
    } 

    public List foo() { 
     Query query = sessionFactory.getCurrentSession().createQuery("...."); 
     ... 
    } 
} 
+0

Pascal에 감사드립니다. 쿼리가 세션에 바인드되었다는 것을 몰랐습니다. 이것은 나를 위해 많은 것을 지워줍니다. – Alkesh

+0

@Alkesh : 천만에요. 그리고 내가 뭘하려고했는지 이해할 수는있어.하지만 그것이 어떻게 작동하는지는 모르겠다. :) –

0

Services은 기본 생성자를 통해 세션 팩토리없이 인스턴스화됩니다. 그 후에 setSession()이 Spring에 의해 호출됩니다. Spring이 아직 setSession()을 호출하지 않았을 때 Java는 인스턴스화 직후 멤버 query을 초기화하려고 시도합니다. 매개 변수화 된 생성자를 통해 세션 팩토리를 삽입하거나 멤버 querysetSession()에 초기화해야합니다.

+0

(). 다음 예외가 발생했습니다 1 : org.springframework.beans.MethodInvocationException : 'sessionFactory'속성이 예외를 throw했습니다. 중첩 예외는 org.hibernate.HibernateException : 스레드에 바인드 된 Hibernate Session이 없으며, 구성은 non-transactional 객체의 생성을 허용하지 않는다. – Alkesh