2014-10-31 10 views
6

खराब अंग्रेजी के लिए खेद है। मैं अपने प्रोजेक्ट spring-boot 1.1.8 के साथ आरंभ करने, आई अपवाद No CurrentSessionContext configured, तो मैं कुछ खोज, संपत्ति <property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property> जोड़ने इस समस्या को हल कर सकता है, लेकिनकोई CurrentSessionContext कॉन्फ़िगर नहीं

कैसे जावा वर्ग का उपयोग कर इस संपत्ति विन्यास के लिए क्या किया?

अद्यतन: मैं Hibernate4.x रास्ता करने के लिए बदल SessionFactory परिभाषित करने के लिए, लेकिन अभी भी एक ही त्रुटि मिली, कृपया मदद!

उपयोग java 1.8 और speing boot 1.1.8

यहाँ मेरी pom.xml

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
     <main.basedir>${basedir}/../..</main.basedir> 
     <m2eclipse.wtp.contextRoot>../</m2eclipse.wtp.contextRoot> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-dependencies</artifactId> 
       <version>1.1.8.RELEASE</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
     </dependency> 
यहाँ

है मेरी सेवा और नियंत्रक है

@AutoWried 
SessionFactory sessionFactory; 

@Service 
@Transactional 
public class UserServiceImpl implements UserService { 
    public boolean isEmailExist(String email) { 
     Session session = sessionFactory.openSession(); 
     // if I use getCurrentSession(), I will got the No Session found for current thread 
     //Session session = sessionFactory.getCurrentSession(); 
     Criteria c = UserCriteria.isEmailExisting(session, email); 
     List<UserInfo> usrs = c.list(); 
     session.close(); 
     if (0 == usrs.size() || usrs.isEmpty()) 
      return false; 
     return true; 
    } 
} 

@Controller 
public class UserRegisterController { 
    @Autowired 
    UserService userService; 

    @RequestMapping("/doRegist") 
    public void doRegister(HttpServletRequest request, 
      HttpServletResponse response) { 
     String usrEmail = request.getParameter("email"); 
     boolean exist = userService.isEmailExist(session, usrEmail); 
     //todo 
    } 
} 

WebApplicatoinStarter.java

@Configuration 
@EnableAutoConfiguration 
@ComponentScan("com.mytest") 
public class WebApplicationStarter extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) { 
     return application.sources(WebApplicationStarter.class); 
    } 

    public static void main(String[] args) throws Exception { 
     ApplicationContext context = SpringApplication.run(WebApplicationStarter.class, args); 
    } 

    @Bean 
    public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) { 
     return hemf.getSessionFactory(); 
    } 
} 
,210

अद्यतन: यहाँ मेरा पूरा स्टैक ट्रेस है:

2014-11-01 08:41:11.736 INFO 3312 --- [   main] com.hotsoft.WebApplicationStarter  : Starting WebApplicationStarter on zblqmc with PID 3312 (D:\x51\p2\target\classes started by lzzafll in D:\x51\p2) 
2014-11-01 08:41:11.814 INFO 3312 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]442675e1: startup date [Sat Nov 01 08:41:11 CST 2014]; root of context hierarchy 
2014-11-01 08:41:13.047 INFO 3312 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]] 
2014-11-01 08:41:14.009 INFO 3312 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$dd4f2c7a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-11-01 08:41:14.041 INFO 3312 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'transactionAttributeSource' of type [class org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-11-01 08:41:14.056 INFO 3312 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'transactionInterceptor' of type [class org.springframework.transaction.interceptor.TransactionInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-11-01 08:41:14.072 INFO 3312 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.config.internalTransactionAdvisor' of type [class org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-11-01 08:41:14.647 INFO 3312 --- [   main] .t.TomcatEmbeddedServletContainerFactory : Server initialized with port: 8080 
2014-11-01 08:41:14.928 INFO 3312 --- [   main] o.apache.catalina.core.StandardService : Starting service Tomcat 
2014-11-01 08:41:14.928 INFO 3312 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.55 
2014-11-01 08:41:15.755 INFO 3312 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext 
2014-11-01 08:41:15.771 INFO 3312 --- [ost-startStop-1] o.s.web.context.ContextLoader   : Root WebApplicationContext: initialization completed in 3957 ms 
2014-11-01 08:41:16.427 INFO 3312 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/] 
2014-11-01 08:41:16.427 INFO 3312 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 
2014-11-01 08:41:17.534 INFO 3312 --- [   main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default' 
2014-11-01 08:41:17.550 INFO 3312 --- [   main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ 
name: default 
...] 
2014-11-01 08:41:17.660 INFO 3312 --- [   main] org.hibernate.Version     : HHH000412: Hibernate Core {4.3.6.Final} 
2014-11-01 08:41:17.660 INFO 3312 --- [   main] org.hibernate.cfg.Environment   : HHH000206: hibernate.properties not found 
2014-11-01 08:41:17.660 INFO 3312 --- [   main] org.hibernate.cfg.Environment   : HHH000021: Bytecode provider name : javassist 
2014-11-01 08:41:17.910 INFO 3312 --- [   main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.5.Final} 
2014-11-01 08:41:18.050 INFO 3312 --- [   main] org.hibernate.dialect.Dialect   : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect 
2014-11-01 08:41:18.206 INFO 3312 --- [   main] o.h.h.i.ast.ASTQueryTranslatorFactory : HHH000397: Using ASTQueryTranslatorFactory 
2014-11-01 08:41:18.861 INFO 3312 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2014-11-01 08:41:19.047 INFO 3312 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hello],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.hotsoft.web.UserRegisterController.hello(java.util.Map<java.lang.String, java.lang.Object>) 
2014-11-01 08:41:19.047 INFO 3312 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/doRegist],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.hotsoft.web.UserRegisterController.doRegister(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 
2014-11-01 08:41:19.063 INFO 3312 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 
2014-11-01 08:41:19.063 INFO 3312 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest) 
2014-11-01 08:41:19.078 INFO 3312 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2014-11-01 08:41:19.078 INFO 3312 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2014-11-01 08:41:19.413 INFO 3312 --- [   main] o.s.j.e.a.AnnotationMBeanExporter  : Registering beans for JMX exposure on startup 
2014-11-01 08:41:19.554 INFO 3312 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080/http 
2014-11-01 08:41:19.569 INFO 3312 --- [   main] com.hotsoft.WebApplicationStarter  : Started WebApplicationStarter in 8.551 seconds (JVM running for 9.276) 
2014-11-01 08:41:32.754 INFO 3312 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring FrameworkServlet 'dispatcherServlet' 
2014-11-01 08:41:32.754 INFO 3312 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization started 
2014-11-01 08:41:32.786 INFO 3312 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 32 ms 
2014-11-01 08:41:39.988 ERROR 3312 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.hibernate.HibernateException: No CurrentSessionContext configured!] with root cause 

org.hibernate.HibernateException: No CurrentSessionContext configured! 
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1012) 
    at com.hotsoft.web.UserRegisterController.doRegister(UserRegisterController.java:41) 
    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.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
+0

कोई समस्या नहीं हल करता है इससे यह और भी खराब हो जाएगा।यदि आपको अपने संदर्भ में एक प्राप्त करने के लिए 'सत्र फ़ैक्टरी' की आवश्यकता है (सुनिश्चित नहीं है कि क्यों लेकिन हां) 'HibernateJpaSessionFactoryBean' का उपयोग करें, तो बस अपने आप को खोलने के बजाय इंजेक्ट करें। अपनी कॉन्फ़िगरेशन/एप्लिकेशन क्लास पोस्ट करें। इसके अलावा मैं आपकी 'UserServiceImpl' को' @ सेवा 'और '@ लेनदेन' के साथ एनोटेट करने की अपेक्षा करता हूं क्योंकि अब कोई लेनदेन नहीं है। –

+0

@ एम। डीनियम धन्यवाद श्रीमान और आपकी उम्मीद के लिए धन्यवाद! हां, मैं वास्तव में 'सत्र कारखाना' का उपयोग करना चाहता हूं क्योंकि मैं हाइबरनेट मानदंडों का उपयोग करने का निर्णय लेता हूं। – Teifi

+0

जेपीए में मानदंड भी है (जेपीए 2 के रूप में) और आपको वास्तव में उन लोगों का उपयोग करने में सावधानी बरतनी चाहिए, सिम्पल प्रश्नों के लिए बस एक क्वेरी का उपयोग करें। –

उत्तर

21

आपका कॉन्फ़िगरेशन और उपयोग हाइबरनेट की गलत है। आप वसंत और यहां तक ​​कि बेहतर वसंत बूट का उपयोग कर रहे हैं, हालांकि आपने जो पोस्ट किया है, वह उन ढांचे का उपयोग न करने के लिए बहुत मेहनत करता है और उनके आसपास काम करने की कोशिश करता है। मैं दृढ़ता से स्प्रिंग बूट का उपयोग करने का सुझाव देता हूं और आपके लिए चीजों को कॉन्फ़िगर करने देता हूं।

पहले अपने HibernateUtils हटाएं, इसे गहराई से दोहराएं और इसे फिर कभी न देखें। आप अपने AppConfig को स्प्रिंग बूट के रूप में भी हटा सकते हैं और DataSource का ख्याल रखेंगे।

अगला application.properties नामक एक फ़ाइल बनाएं जो आपके src/main/resources निर्देशिका में है और निम्न सामग्री को वहां डालें।

spring.datasource.url=jdbc:mysql://localhost/mysql 
spring.datasource.username=root 
spring.datasource.password= 

यह स्वचालित रूप से आपके लिए DataSource कॉन्फ़िगर करेगा। आपको ड्राइवर की आवश्यकता नहीं है क्योंकि यह आपके द्वारा प्रदान किए गए यूआरएल से लिया जाता है। अगला जेपीए को कॉन्फ़िगर करने के लिए निम्न गुण जोड़ें।

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect 
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext 

अधिक सेटिंग्स और गुण के लिए मैं संपत्तियों के लिए Spring Boot Reference Guide का रीड इस comprehensive list जाँच सुझाव देते हैं।

अपने WebApplicationStarter में अगले एक SessionFactory के रूप में बनाया जेपीए EntityManagerFactory बेनकाब करने के लिए HibernateJpaSessionFactoryBean जोड़ें।

@Configuration 
@EnableAutoConfiguration 
@ComponentScan("com.mytest") 
public class WebApplicationStarter extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(WebApplicationStarter.class); 
    } 

    public static void main(String[] args) throws Exception { 
     ApplicationContext context = SpringApplication.run(WebApplicationStarter.class, args); 
    } 

    @Bean 
    public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) { 
     return hemf.getSessionFactory(); 
    } 
} 

तो बस @AutowireSessionFactory अपने UserServiceImpl में।

@Service 
@Transactional 
public class UserServiceImpl implements UserService { 

    @Autowired 
    private SessionFactory sessionFactory; 

} 

अब आप SessionFactory का उपयोग कर सकते हैं।

+0

में कोई त्रुटि मिली, और मुझे अपडेट किया गया है। – Teifi

+0

हम्म दिलचस्प, किसी कारण से प्रॉक्सी बनाई जा रही है जो आवश्यक इंटरफेस को लागू नहीं करती है। क्या आपके पास स्प्रिंग बूट पर भरोसा करने के बजाय अधिक कस्टम कॉन्फ़िगरेशन है? आह, आप यहां एक मामूली समस्या में भाग रहे हैं, मुझे डर है ... हालांकि वसंत को आम तौर पर 4.3 और उससे कम हाइबरनेट के साथ काम करने के लिए अपडेट किया गया है, यह कक्षा मुझे लगता है कि एक निरीक्षण था। मैंने उस समाधान के उत्तर को अपडेट किया जो काम करना चाहिए। –

+0

बिल्कुल कोई कस्टम कॉन्फ़िगरेशन नहीं है। मैं निराश हूं, एक बार जब मैं '@ बीन हिबर्नेटजेपा सत्र फ़ैक्टरीबीन' का उपयोग करता हूं तो यह त्रुटि आई, मैं अपने बालों को बाहर खींचना चाहता हूं! मैं एक और डेटास्रोत कॉन्फ़िगर करना चाहता हूं, एक पढ़ना है और दूसरा लिखना है, लेकिन वह स्वर्ग शुरू होता है। – Teifi

संबंधित मुद्दे

 संबंधित मुद्दे