im gettting lỗi saumùa xuân và ngủ đông: Không có phiên tìm thấy cho thread hiện hành
org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1024)
at com.fexco.shoptaxfreemobile.service.ProfileService.registerVisitor(ProfileService.java:57)
at com.fexco.shoptaxfreemobile.controller.ProfileController.registerVisitor(ProfileController.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.fexco.shoptaxfreemobile.jsonp.JsonpCallbackFilter.doFilter(JsonpCallbackFilter.java:33)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
lớp Service
@Service
public class ProfileService {
@Resource(name = "mySessionFactory")
private SessionFactory sessionFactory;
@Autowired
private ProfileDao profileDao;
private class CountrySorter implements Comparator<Country> {
@Override
public int compare(Country country1, Country country2) {
if (country1.getId().compareTo(new Long (3)) < 0){
return country1.getId().compareTo(country2.getId());
}
return country1.getName().compareToIgnoreCase(country2.getName());
}
}
public List<Country> getCountries() {
List<VisitorCountry> visitorCountries = profileDao.getAllCountries();
List<Country> countries = new ArrayList<Country>();
for (VisitorCountry country : visitorCountries){
countries.add(country.getCountry());
}
Comparator<Country> comparator = new CountrySorter();
Collections.sort(countries, comparator);
return countries;
}
public RegisterResponse registerVisitor(JsonVisitor visitorDetails){
Visitor storedVisitor = (Visitor) sessionFactory.getCurrentSession().get(Visitor.class, visitorDetails.getTfscNumber(), LockMode.NONE);
if (storedVisitor == null){
storedVisitor = new Visitor(visitorDetails);
}else{
storedVisitor.setVisitorDetails(visitorDetails);
}
try{
sessionFactory.getCurrentSession().saveOrUpdate(storedVisitor);
}catch(Exception ex){
return new RegisterResponse(false, "Failed To Register Card. Please Try Again Later.", visitorDetails);
}
return new RegisterResponse(true, "", visitorDetails);
}
}
chút của lớp DAO
@Service
@Transactional
public class ProfileDao {
@Resource(name = "mySessionFactory")
private SessionFactory sessionFactory;
public List getAllCountries(){
List<VisitorCountry> visitorCountries = sessionFactory.getCurrentSession()
.getNamedQuery("GET_ALL_COUNTRIES").list();
return visitorCountries;
}
public List<Retailer> getRetailerByRetailerNumber(String retailerNo) {
List<Retailer> retailerByRetailerNumber = sessionFactory.getCurrentSession()
.getNamedQuery("FindRetailerByRetailerNo").setString("retailerNo", retailerNo).list();
return retailerByRetailerNumber;
}
và tôi có điều này trong my application-context.xml
0 của tôiai có thể nhận ra tại sao tôi nhận được lỗi sau?
câu trả lời của jordan002 là chính xác, nhưng vấn đề "thực" là thay vì gọi DAO trong dịch vụ của bạn, bạn đang truy cập DB từ lớp dịch vụ ... Nói cách khác, bạn muốn phương thức dịch vụ xử lý giao dịch thay vì chỉ các phương thức DAO - nếu bạn có 2 cập nhật trong phương thức dịch vụ và phương thức thứ hai không thành công, giao dịch không giúp bạn có DB phù hợp (nhưng nó phụ thuộc vào logic nghiệp vụ của bạn) . – Betlista