Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Spring HibernateeException:无法获取当前线程3的事务同步会话_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Spring HibernateeException:无法获取当前线程3的事务同步会话

Spring HibernateeException:无法获取当前线程3的事务同步会话,spring,hibernate,spring-mvc,Spring,Hibernate,Spring Mvc,我得到一个错误: org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread 如果在DataSourceContext.xml中添加以下代码段,则不会出现任何错误,应用程序也会按预期工作 <bean id="userDAO" class="com.my.portal.user.UserDAOImpl"> <property

我得到一个错误:

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
如果在DataSourceContext.xml中添加以下代码段,则不会出现任何错误,应用程序也会按预期工作

<bean id="userDAO" class="com.my.portal.user.UserDAOImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
UserController.java

@Entity
@Table(name="USER")  
public class User {

    @Id
    @Column(name="UserId")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int UserId;
    private String FirstName;
    private String LastName;
    public int getUserId() {
        return UserId;
    }
    public void setUserId(int userId) {
        UserId = userId;
    }
    public String getFirstName() {
        return FirstName;
    }
    public void setFirstName(String firstName) {
        FirstName = firstName;
    }
    public String getLastName() {
        return LastName;
    }
    public void setLastName(String lastName) {
        LastName = lastName;
    }
    @Override
    public String toString(){
        return "UserId="+UserId+", FirstName="+FirstName+", LastName="+LastName;
    }
}
@Controller
public class UserController {

private static final Logger logger = LoggerFactory.getLogger(UserController.class);

private UserService userService;

@Autowired
public UserController(UserService userService){
    this.userService = userService;
}

@RequestMapping(value = "/user", method = RequestMethod.GET)
public String user(Locale locale, Model model){
    model.addAttribute("getUser",userService.getUser());
    return "user";

}
@Repository
public interface UserDAO {

    public List<User> getUser();

}
@Repository
@Transactional
public class UserDAOImpl  implements UserDAO {

    private static final Logger logger = LoggerFactory.getLogger(UserDAOImpl.class);

    private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory){
        this.sessionFactory = sessionFactory;
    }

    private Session currentSession() {
        return sessionFactory.getCurrentSession();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUser() {
        List<User> userList = currentSession().createQuery("from User").list();
        return userList;
    }

}
@Service
public interface UserService {

    public String getMessage();
}
@Service
public class UserServiceImpl implements UserService {

    private UserDAO userDAO;

    @Autowired
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    public String getMessage(){
        return "User Registration Page";
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUser(){
        logger.info("getUser()");
        return this.userDAO.getUser();
    }
}
UserDAO.java

@Entity
@Table(name="USER")  
public class User {

    @Id
    @Column(name="UserId")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int UserId;
    private String FirstName;
    private String LastName;
    public int getUserId() {
        return UserId;
    }
    public void setUserId(int userId) {
        UserId = userId;
    }
    public String getFirstName() {
        return FirstName;
    }
    public void setFirstName(String firstName) {
        FirstName = firstName;
    }
    public String getLastName() {
        return LastName;
    }
    public void setLastName(String lastName) {
        LastName = lastName;
    }
    @Override
    public String toString(){
        return "UserId="+UserId+", FirstName="+FirstName+", LastName="+LastName;
    }
}
@Controller
public class UserController {

private static final Logger logger = LoggerFactory.getLogger(UserController.class);

private UserService userService;

@Autowired
public UserController(UserService userService){
    this.userService = userService;
}

@RequestMapping(value = "/user", method = RequestMethod.GET)
public String user(Locale locale, Model model){
    model.addAttribute("getUser",userService.getUser());
    return "user";

}
@Repository
public interface UserDAO {

    public List<User> getUser();

}
@Repository
@Transactional
public class UserDAOImpl  implements UserDAO {

    private static final Logger logger = LoggerFactory.getLogger(UserDAOImpl.class);

    private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory){
        this.sessionFactory = sessionFactory;
    }

    private Session currentSession() {
        return sessionFactory.getCurrentSession();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUser() {
        List<User> userList = currentSession().createQuery("from User").list();
        return userList;
    }

}
@Service
public interface UserService {

    public String getMessage();
}
@Service
public class UserServiceImpl implements UserService {

    private UserDAO userDAO;

    @Autowired
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    public String getMessage(){
        return "User Registration Page";
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUser(){
        logger.info("getUser()");
        return this.userDAO.getUser();
    }
}
UserServiceImpl.java

@Entity
@Table(name="USER")  
public class User {

    @Id
    @Column(name="UserId")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int UserId;
    private String FirstName;
    private String LastName;
    public int getUserId() {
        return UserId;
    }
    public void setUserId(int userId) {
        UserId = userId;
    }
    public String getFirstName() {
        return FirstName;
    }
    public void setFirstName(String firstName) {
        FirstName = firstName;
    }
    public String getLastName() {
        return LastName;
    }
    public void setLastName(String lastName) {
        LastName = lastName;
    }
    @Override
    public String toString(){
        return "UserId="+UserId+", FirstName="+FirstName+", LastName="+LastName;
    }
}
@Controller
public class UserController {

private static final Logger logger = LoggerFactory.getLogger(UserController.class);

private UserService userService;

@Autowired
public UserController(UserService userService){
    this.userService = userService;
}

@RequestMapping(value = "/user", method = RequestMethod.GET)
public String user(Locale locale, Model model){
    model.addAttribute("getUser",userService.getUser());
    return "user";

}
@Repository
public interface UserDAO {

    public List<User> getUser();

}
@Repository
@Transactional
public class UserDAOImpl  implements UserDAO {

    private static final Logger logger = LoggerFactory.getLogger(UserDAOImpl.class);

    private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory){
        this.sessionFactory = sessionFactory;
    }

    private Session currentSession() {
        return sessionFactory.getCurrentSession();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUser() {
        List<User> userList = currentSession().createQuery("from User").list();
        return userList;
    }

}
@Service
public interface UserService {

    public String getMessage();
}
@Service
public class UserServiceImpl implements UserService {

    private UserDAO userDAO;

    @Autowired
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    public String getMessage(){
        return "User Registration Page";
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> getUser(){
        logger.info("getUser()");
        return this.userDAO.getUser();
    }
}
@服务
公共类UserServiceImpl实现UserService{
私有UserDAO UserDAO;
@自动连线
公共void setUserDAO(UserDAO UserDAO){
this.userDAO=userDAO;
}
公共字符串getMessage(){
返回“用户注册页面”;
}
@抑制警告(“未选中”)
@凌驾
公共列表getUser(){
logger.info(“getUser()”);
返回这个.userDAO.getUser();
}
}

为什么在界面和impl上有
@Transactional
注释?(UserServiceImpl也是如此,在类和方法getUser()上有注释)只有服务应该是事务性的,而不是dao。如果您正在使用扫描,请确保您没有扫描组件两次,并且组件需要与
处于相同的上下文中,否则事务将无法工作。我已从UserServiceImpl和UserDAO中删除了
@Transactional
。如果我从UserDAOImpl中删除
@Transactional
,我会得到相同的异常,即使是我在问题中提到的代码片段。我已经进行了服务事务,将
@Transactional
应用到userserviceinmpl,但仍然会得到相同的错误。我只扫描了一次组件。现在我只有@M.Denium建议的userserviceinpl.java中的
@Transactional
,但仍然得到相同的错误。