`

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

 
阅读更多
@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不同步的问题,这个问题要怎么解决啊?

 

 

 

 

1
1
分享到:
评论

相关推荐

    org.hibernate.HibernateException: No Hibernate Session bound to thread

    No Hibernate Session bound to thread,没有绑定线程解决办法,找了好久才找到的

    解决SpringDataJPA报错:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null w

    问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...

    HIbernate4.3.6整合c3p0所需jar

    Caused by: org.hibernate.HibernateException: Could not instantiate connection provider [org.hibernate.connection.C3P0ConnectionProvider] at org.hibernate.engine.jdbc.connections.internal....

    Spring4.0+Hibernate4.0+Struts2.3整合案例

    2、报错:org.hibernate.HibernateException: No Session found for current thread 意思是必须在transcation.isActive()条件下才能执行, 可以解决办法是:当方法不需要事务支持的时候,使用 Session ...

    Hibernate+Proxool配置

    由于项目需求的需要,我们引入了连接池。数据库连接池的最大好处是节省开销。我们采用了Hibernate,所以可以考虑hibernate自带的连接池机制,但是发现效率不高,而且Hibernate也推荐使用c3p0或Proxool连接池,在我们...

    spring_MVC源码

    51. &lt;tx:annotation-driven transaction-manager="transactionManager" /&gt; 52. &lt;tx:annotation-driven mode="aspectj"/&gt; 53. 54. &lt;aop:aspectj-autoproxy/&gt; 55.&lt;/beans&gt; hibernate.properties数据库连接...

    Hibernate3技术精辟详解

    Hibernate3技术精辟详解 Hibernate3 Hibernate3详解,看过就知道Hibernate3怎么配置和应用

    Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法

    1.Caused by: org.hibernate.HibernateException: Connection cannot be null when ‘hibernate.dialect’ not set 报错就配置吧 启动项目不报错了,但是访问项目报错了 2.访问报错...

    用户管理系统

    Transaction tran=session.beginTransaction(); String hql="from User"; Query query=session.createQuery(hql); List list=query.list(); tran.commit(); session.close(); return list; } ...

    J2EE利用Hibernate采用B/S架构网页设计

    import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; /** * Configures and provides access to Hibernate sessions, tied to the * current ...

    新闻发布系统

    public List&lt;News&gt; doInHibernate(Session session) throws HibernateException,SQLException { List&lt;News&gt; list = null; Query query = session.createQuery("from News order by id desc"); query....

    struts hibernate spring 搞定分布式事务

    public void executeTransactionBySQL() throws HibernateException { TestJTAByOracleVo vo1=new TestJTAByOracleVo(); vo1.setName("3333333"); HibernateByOracleDAO.addByOracle(vo1); ...

    数据库课程设计题目与例子

    public void deleteUsers(Users users) throws HibernateException { Session session = HibSessionFactory.currentSession(); Transaction tx = session.beginTransaction(); session.delete(users); tx....

    jsp Hibernate入门教程第1/3页

    例如: 代码如下:HibernateTest.java ... public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().bui

    hibernate的事务核并发

    hibernate详细解析.pdf文档,所有的都有。。

    深入浅出Hibernate中文版 part2

    6.8 HibernateException,Checked 6.9 Template/Callback 简化业务方法 6.10 版面:一棵自身循环的树 6.11 版面与帖子:Master/Detail 主从关系 6.12 帖子树及其分页 6.13 与Web层交互 6.14 帖子的多形扩展:...

    深入浅出Hibernate中文版 part1

    6.8 HibernateException,Checked 6.9 Template/Callback 简化业务方法 6.10 版面:一棵自身循环的树 6.11 版面与帖子:Master/Detail 主从关系 6.12 帖子树及其分页 6.13 与Web层交互 6.14 帖子的多形扩展:...

Global site tag (gtag.js) - Google Analytics