首页 > Web开发 > 详细

怎么解决啊???"Thread-14" HibernateException: Could not obtain transaction-.....

时间:2015-12-30 02:07:15      阅读:301      评论:0      收藏:0      [点我收藏+]
@Component
public class LookCacheData {
    public static LookRecordService lookRecordServiceNo;
    public static PhoneBookService phoneBookServiceNo;
    public static UserService userServiceNo;
    public ThreadLook threadLook = new ThreadLook();
    //所有登录用户
    public static LinkedHashMap<String, CopyOnWriteArrayList<LookObject>> loginUserMap = new LinkedHashMap<>();

    public LookCacheData() {
        threadLook.start();
        System.out.println("~~~~~~~~~~~~~~~~LookCacheData~~~~~~~~~启动线程~~~~~~~~~");
    }

    static class ThreadLook extends Thread {
        // 线程主处理函数,用于定期从数据库中读取Pk对放入队列中
        @Transactional
        public void run() {
            while (true){
                while (loginUserMap != null && loginUserMap.size() > 0) {

                    for (String loginUid : loginUserMap.keySet()) {
                        CopyOnWriteArrayList<LookObject> lookedList = (CopyOnWriteArrayList<LookObject>) loginUserMap.get(loginUid);
                        if (StringUtils.isBlank(loginUid)) {
                            continue;
                        }
                        User loginUser = userServiceNo.findByUid(loginUid);//该行进行查询
                        。。。。。。

?每次通过controller进行的查询,是完全正常的,可是该线程中的查询,总是出现以下错误提示:

?

Exception in thread "Thread-14" org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
	at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
	at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:993)
	at com.haokan.tools.base.BaseDao.getSession(BaseDao.java:61)
	at com.haokan.tools.base.BaseDao.queryByUniqueColumn(BaseDao.java:794)
	at com.haokan.modules.service.UserService.findByUid(UserService.java:74)
	at com.haokan.tools.bean.LookCacheData$ThreadLook.run(LookCacheData.java:55)

?hibernate的配置如下:

?

?

<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>

?网上都说,将HibernateSession绑定到Thread,只需要将current_session_context_class配置好就好了,可是,我这始终会出现异常:不能获取当前线程的同步session;

?

无论是在LookCacheData中还是在ThreadLook中添加以下绑定注解,service对象都是null,

?

@Autowired
public LookRecordService lookRecordService;
@Autowired
public PhoneBookService phoneBookService;
@Autowired
public UserService userService;

所以,上面的

?

User loginUser = userServiceNo.findByUid(loginUid);

中的userServiceNo是我在用户登录的时候的userService的值,如果能够让上面3个绑定注解在我的线程运行中的时候不是null,就万事大吉了,可是他们3个一直为空;如果用其他controller中的userService的值,又会出现session不同步的问题,这个问题要怎么解决啊?

?

?

?

?

怎么解决啊???"Thread-14" HibernateException: Could not obtain transaction-.....

原文:http://yunlian0621.iteye.com/blog/2267428

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!