Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Hibernate 5异常:HibernateException:无法获取当前线程的事务同步会话_Java_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java Spring Hibernate 5异常:HibernateException:无法获取当前线程的事务同步会话

Java Spring Hibernate 5异常:HibernateException:无法获取当前线程的事务同步会话,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我正在Github上进行培训,但现在遇到了一个例外 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread org.springframework.w

我正在Github上进行培训,但现在遇到了一个例外

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:986)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
org.springframework.orm.hibernate5.SpringSessionContext.currentSession(SpringSessionContext.java:136)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:465)
common.dao.AbstractHibernateDAO.getCurrentSession(AbstractHibernateDAO.java:54)
common.dao.AbstractHibernateDAO.create(AbstractHibernateDAO.java:31)
com.department.model.DepartmentServiceImpl.addDepartment(DepartmentServiceImpl.java:21)
com.controller.DepartmentController.Insert(DepartmentController.java:29)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:871)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:777)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我在谷歌上搜索过这个异常,知道它的注释,比如@Service@Controller@Repository@Transactional和added

我也使用Junit,它工作得很好

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

   @Override
   protected Class<?>[] getRootConfigClasses() {
      return new Class[] { HibernateConf.class };
   }

   @Override
   protected Class<?>[] getServletConfigClasses() {
      return new Class[] { WebMvcConfig.class };
   }

   @Override
   protected String[] getServletMappings() {
      return new String[] { "/" };
   }
}
webmvcconfig

@Configuration
@EnableWebMvc
@ComponentScan({"com.controller","com.department.model" , "com.employee.model" , "com.project.model"})
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver resolver() {
  InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  resolver.setViewClass(JstlView.class);
  resolver.setPrefix("/WEB-INF/");
  resolver.setSuffix(".jsp");
  return resolver;
}

}
实体

package com.department.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.employee.model.EmployeeVO;

@Entity
@Table(name = "department")
public class DepartmentVO implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "department_id")
private Integer department_id;

@Column(name = "dname")
private String dname;

@Column(name = "loc")
private String loc;

@OneToMany(cascade = CascadeType.ALL , mappedBy = "departmentVO" , fetch = FetchType.EAGER) // lazy = false
private Set<EmployeeVO> employees = new HashSet<EmployeeVO>();

public DepartmentVO() {
    super();
}

public Integer getDepartment_id() {
    return department_id;
}

public void setDepartment_id(Integer department_id) {
    this.department_id = department_id;
}

public String getDname() {
    return dname;
}

public void setDname(String dname) {
    this.dname = dname;
}

public String getLoc() {
    return loc;
}

public void setLoc(String loc) {
    this.loc = loc;
}

public Set<EmployeeVO> getEmployees() {
    return employees;
}

public void setEmployees(Set<EmployeeVO> employees) {
    this.employees = employees;
}

}

我很确定我使用了与您相同的教程,我在服务类上使用了@Transactional注释,而不是在存储库上。我不明白为什么会有什么不同,但你试过这种方法吗?我遇到了完全相同的错误,这是因为我的主线程由于缺少bean而崩溃,而实体管理器正在关闭,这导致其他线程无法启动事务。

这已经是一个很大的代码集,似乎不是最小的。通过包含注释掉的代码来扩大它是没有帮助的。@KarlRichter好的,我删除了它,很抱歉放了一些无用的代码。你的意思是我把@Transactional从dao放到服务中吗?我做了,但我得到了同样的错误我只做了spring-hibernate-5演示的教程,使用spring mvc,我使用了我老师以前教我的示例,所以我对其中两个感到困惑,无论如何,谢谢,我明天会检查这个错误让我知道,你的代码在分解方式、配置类方面与我的非常相似,等等,我刚刚注意到,你的会话工厂被声明为final,然后你在它上面设置了一堆属性,这不是一个问题吗?不,不是,我删除了两个“final”,错误没有改变
package com.department.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.employee.model.EmployeeVO;

@Entity
@Table(name = "department")
public class DepartmentVO implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "department_id")
private Integer department_id;

@Column(name = "dname")
private String dname;

@Column(name = "loc")
private String loc;

@OneToMany(cascade = CascadeType.ALL , mappedBy = "departmentVO" , fetch = FetchType.EAGER) // lazy = false
private Set<EmployeeVO> employees = new HashSet<EmployeeVO>();

public DepartmentVO() {
    super();
}

public Integer getDepartment_id() {
    return department_id;
}

public void setDepartment_id(Integer department_id) {
    this.department_id = department_id;
}

public String getDname() {
    return dname;
}

public void setDname(String dname) {
    this.dname = dname;
}

public String getLoc() {
    return loc;
}

public void setLoc(String loc) {
    this.loc = loc;
}

public Set<EmployeeVO> getEmployees() {
    return employees;
}

public void setEmployees(Set<EmployeeVO> employees) {
    this.employees = employees;
}

}
package com.department.model;

import java.util.Set;

import common.dao.Operations;

public interface DepartmentDAO extends Operations<DepartmentVO> {

}

package com.department.model;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import common.dao.AbstractHibernateDAO;

@Repository
@Transactional
public class DepartmentDAOImpl extends AbstractHibernateDAO<DepartmentVO> implements DepartmentDAO {

public DepartmentDAOImpl() {
    super();

    setClazz(DepartmentVO.class);
}
}
package com.department.model;

import java.util.List;

public interface DepartmentService {

List<DepartmentVO> getAll();
void addDepartment(DepartmentVO departmentVO);
}

package com.department.model;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DepartmentServiceImpl implements DepartmentService{

@Autowired
private DepartmentDAO dao;

@Override
public List<DepartmentVO> getAll() {
    return dao.findAll();
}

@Override
public void addDepartment(DepartmentVO departmentVO) {
    dao.create(departmentVO);
}
}
package com.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.department.model.DepartmentService;
import com.department.model.DepartmentVO;

@Controller
@RequestMapping("/dept")
public class DepartmentController {

@Autowired
private DepartmentService deptSvc;

@GetMapping("addDept")
public String addDept(ModelMap model) {
    DepartmentVO departmentVO = new DepartmentVO();
    model.addAttribute("departmentVO" , departmentVO);
    return "dept/addDept";
}

@PostMapping("insert")
public String Insert(DepartmentVO departmentVO , ModelMap model) {
    deptSvc.addDepartment(departmentVO);
    return "dept/addDept";
}
}