如果是用的mysql数据库,默认的事务级别为可重复读,如果你查询不用事务,那么用同一个数据库连接多次request查询读到的是自上一次该连接事务提交后的同一个数据快照,虽然期间其他事务可能修改了数据,但你读不到。直到该连接用于更新或插入数据而提交,用该连接读取的快照才会改变。因为每次请求分配的数据库连接可能不是同一个,所以各次的表现不一样。
所以强调即使只有数据查询也要使用事务,并提交事务。
有的连接池在将连接放回到池中时会自动提交事务,所以没有问题。
另外request结束不关闭hibernate session是不好的方式,每个session中保持着一个数据库连接,最后每个处理线程都保持着一个session,使得数据库连接数和线程池中的线程数一样多。
所以强调即使只有数据查询也要使用事务,并提交事务。
有的连接池在将连接放回到池中时会自动提交事务,所以没有问题。
另外request结束不关闭hibernate session是不好的方式,每个session中保持着一个数据库连接,最后每个处理线程都保持着一个session,使得数据库连接数和线程池中的线程数一样多。