简体   繁体   English

Spring 4和Hibernate 4 Session错误

[英]Spring 4 and Hibernate 4 Session error

On My Spring MVC and hibernate web project what is java base cofiguration, it's generate table from Entity class happly but when i am trying to generate a list of data from my post table but i gate a error about getCurrent Session...... 在My Spring MVC和hibernate Web项目上,什么是Java基础配置,它是从Entity类happly生成表,但是当我尝试从post表中生成数据列表时,却出现了关于getCurrent Session的错误……

My Entity Class: 我的实体类:

@Entity
@Table(name="post")
public class Post{

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;

@Column(nullable = false)
String title;

@Column(nullable = false)
@Type(type="text")
String body;

@Column(nullable = true)
String feature_image;

@Column(nullable = true)
int active_status = 1;

 }

Dao: 道:

@Repository
public class TestDao {

@Autowired
private SessionFactory sessionFactoryBean;

private Session getCurrentSession() {
    return sessionFactoryBean.getCurrentSession();
}


@SuppressWarnings("unchecked")
public List<Post> listProduct() {
    return (List<Post>) 
   getCurrentSession().createCriteria(Post.class).list();
  }
}

Service: 服务:

@Service
@Transactional
public class TestService{

@Autowired
private TestDao testDao;

public List<Post> postList(){
return testDao.listProduct();
 }
}

Controller: 控制器:

@Controller
public class HomeController {

@Autowired
TestService testService;

@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(ModelMap map) {

    List<Post> results = testService.postList();
    Post lastPost=null;
    if(!results.isEmpty()){
        Collections.reverse(results);
        lastPost = results.get(0);
        results.remove(0);
    }
    map.addAttribute("lastPost",lastPost);
    map.addAttribute("postList",results);
    return "home";
  }
}

Configuration class: 配置类:

@Configuration
@PropertySource("classpath:db.properties")
public class AppDataSourceConfig {

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();     
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/testdb?useSSL=false");
    dataSource.setUsername("root");
    dataSource.setPassword("root");

    return dataSource;
}

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactoryBean = new 
    LocalSessionFactoryBean();
    sessionFactoryBean.setDataSource(dataSource());
    sessionFactoryBean.setPackagesToScan("com.imran.model");
    sessionFactoryBean.setHibernateProperties(hibProperties());
    return sessionFactoryBean;
}

private Properties hibProperties() {
    Properties properties = new Properties();
    properties.put("hibernate.dialect", 
    "org.hibernate.dialect.MySQLDialect");
    properties.put("hibernate.show_sql", "true");
    properties.put("hibernate.hbm2ddl.auto","update");
    return properties;  
  }

@Bean
public HibernateTransactionManager transactionManager() {
    HibernateTransactionManager transactionManager = new 
    HibernateTransactionManager();
    transactionManager.setSessionFactory(sessionFactory().getObject());
    return transactionManager;
  }
}

And finally error: 最后是错误:

   Mar 04, 2018 10:28:52 PM org.apache.catalina.core.StandardWrapperValve 
  invoke
  SEVERE: Servlet.service() for servlet [dispatcher] in context with path 
    [/BlogSolutionUsingSpringHibernateWithClassLevelConfig] threw exception 
     [Request processing failed; nested exception is 
      org.hibernate.HibernateException: Could not obtain transaction-
     synchronized 
      Session for current thread] with root cause
      org.hibernate.HibernateException: Could not obtain transaction-
       synchronized Session for current thread at 

org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSes sionContext.java:134) at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014) at com.imran.dao.TestDao.getCurrentSession(TestDao.java:21) at com.imran.dao.TestDao.listProduct(TestDao.java:27) at com.imran.service.TestService.postList(TestService.java:23) at com.imran.controller.HomeController.index(HomeController.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annot org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSes sionContext.java:134)在org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)在com.imran.dao.TestDao.getCurrentSession(TestDao.java :21)位于com.imran.dao.TestDao.listProduct(TestDao.java:27)位于com.imran.service.TestService.postList(TestService.java:23)位于com.imran.controller.HomeController.index(HomeController。 java:29)位于sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(Method.java:497)在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod .java:136),位于org.springframework.web.servlet.mvc.method.annot ation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:871) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:777) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:871)上的ation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)在org.springframework.web.servlet.mvc.method上。 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.org)上的注解.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:777)在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)的org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)的org.springframework.web.servlet的java:991) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet)上的javax.servlet.http.HttpServlet.service(HttpServlet.java:622)上的.FrameworkServlet.doGet(FrameworkServlet.java:870)。 java:855) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractA org.apache.catalina.core.ApplicationFilterChain的javax.servlet.http.HttpServlet.service(HttpServlet.java:729)的java:855)org.apache.catalina.core.ApplicationFilterChain的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)处的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)处的.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)在org.apache.catalina.core.StandardContextValve.invoke( org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)处的org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)处的StandardContextValve.java:106) org.apache.catalina.valves.AbstractA上的.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) ccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) org处的org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)处的ccessLogValve.invoke(AbstractAccessLogValve.java:616)org处的org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) .apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:673)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor org.apache.tomcat.util.net上的.doRun(NioEndpoint.java:1500),java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)上的org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1456) org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)处的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(线程(java:745)

在您的课程上添加@EnableTransactionManagement应该可以解决您的问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM