问题:一个查询sql,在连续两次调用此sql,会传递不同的参数。
不同的参数将导致两种查询结果。可是:在实际运行时 两次sql执行的结果一样。并且最后发现,最后一次的sql执行,并没有在数据库中执行。
表结构如下:
汉字 字段 类型
现金 xianjin double
汇率 huilv double
Select xianjin*huilv from a(此sql根据传值判断,是否应当乘以汇率)
正常的情况:
在第一调用时,此sql执行乘以汇率的sql。
在第二次调用时,此sql执行没有乘以汇率的sql。
问题为:两次的sql都是乘以汇率。
跟踪方法。通过JUNIT,将两次调用sql同时调用,发现执行的结果,确实存在问题。
1、查看hibernate 输出的sql日志:
执行的sql,确实不乘以日志。
获取数据库值是如下方法:
getSession().createSQLQuery(dongtaiSql).addEntity(
"XX", xx.class).list();
其中: getSession()为系统内共用内存。
public static Session getSession() {
//代码省略
}
2、跟踪oracle数据库执行sql
-------oracle 查看已经执行过的sql 这些是存在共享池中的 --------->
select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc
发现没有预期执行的sql在共享池中。
所以推断,此处出现的问题,与使用hibernate不熟练有关。
在dao方法中加了一个清除缓存的方法:
getSession().clear();
再次执行JUNIT测试用例,sql执行正常。
备注:
此问题还遗留了一个问题,此缓存的逻辑,暂时能力有限。
参考了下面的资源,还是不太了解,有能力时,在啃大骨头
http://www.iteye.com/problems/93406
hibernate清除缓存与自动提交的关系10
http://www.cnblogs.com/xiaoluo501395377/p/3377604.html
hibernate缓存机制详细分析
http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html
Hibernate 缓存机制
http://blog.csdn.net/an_2016/article/details/52088712
Hibernate之缓存详解
分享到:
相关推荐
ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园
- 如果需要自定义缓存策略,可以通过实现`CacheResolver`、`KeyGenerator`和`CacheErrorHandler`接口来自定义缓存解析、键生成和错误处理。 5. **缓存穿透和缓存击穿问题**: - 缓存穿透是指查询一个不存在的数据...
1. 概述 2. 缓存雪崩 3. 缓存击穿 4. 缓存穿透 5. 小结
当我们谈论“先锋缓存类-测试可用”时,这通常是指一个特定的ASP(Active Server Pages)开发的缓存管理类库,它可以帮助优化asp页面的加载和处理速度。 在ASP编程中,缓存机制允许我们将频繁访问的数据存储在内存...
- 缓存是一种存储技术,用于暂时存储经常访问的数据,减少对主存储器或数据库的访问,以提高数据处理速度。Ehcache 使用内存和磁盘混合存储,兼顾速度与容量。 2. **Ehcache 结构** - Ehcache 由三个主要组件...
除了自定义`CacheManager`外,我们还可以通过实现`CacheResolver`和`CacheErrorHandler`等接口来自定义缓存解析和错误处理策略。 1. `CacheResolver`:该接口负责在方法执行时解析应使用的缓存。你可以根据请求上...
前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并
缓存框架-ehcache架构图
在Android应用开发中,图片加载和缓存是一个关键性能优化环节。这个压缩包"安卓图片加载缓存相关-Android图片二级缓存.zip"显然包含了关于如何实现高效图片加载和二级缓存的源码示例。这里我们将深入探讨图片加载...
Ehcache 是一个广泛使用的开源 Java 缓存框架,它在处理大量数据的高性能应用中扮演着重要角色。Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速访问频繁使用的数据,从而提高整体...
3. 编写自定义缓存实现,处理并发和过期策略。 4. 注意事务控制,确保在提交事务后,相关数据能够被正确更新到缓存中。 以上是对Hibernate、Shiro和MyBatis中二级缓存的概述和配置流程。理解并熟练掌握这些技术,...
- 使用互斥锁处理并发请求,防止雪崩。 8. **最佳实践** - 缓存的大小和存活时间应根据业务需求调整。 - 对于更新频繁的数据,考虑使用异步更新策略。 - 使用合适的序列化机制,保证缓存数据的序列化和反序列化...
分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。...
总之,保证分布式缓存与数据库的强一致性是一项挑战,需要通过设计合理的数据同步策略和处理机制来平衡一致性、可用性和分区容忍性。上述方案提供了一种可能的实践路径,但实际应用中还需根据具体业务需求和系统性能...
因此,良好的缓存配置应包含适当的异常处理策略,以优雅地处理这些问题。 9. **缓存超时与过期策略** Spring Cache允许设置缓存项的过期时间,这样可以确保旧数据不会无限期地占用存储空间。这可以通过`...
2.3.4 ARP 缓存污染 - Wireshark 数据包分析实战(第 3 版) - 知乎书店 1.3.3单播流量 1.4结 2.1混杂模式 2.2在
而在处理动态内容时,我们可能希望禁用缓存,以确保每次请求都能获取到最新的数据。在Filter中,我们可以根据URL路径或请求类型来判断是否添加缓存相关的HTTP响应头。 四、Filter的配置与链式处理 在Web应用的web....
**Android-Universal-Image-Loader** 是一个广泛使用的开源库,专为Android应用程序设计,用于高效、异步地加载和缓存网络、本地存储或资源中的图像。它由俄罗斯开发者Denis Zholos创建,旨在解决Android应用在处理...
在Android开发中,图片加载和缓存是一个非常关键的环节,尤其在处理大量图片的应用中,如社交应用、电商应用等。"安卓图片加载缓存相关-Android-异步图片加载器.zip"这个压缩包中可能包含了一个实现异步图片加载和...