hibernate如何避免复杂查询,优化大数据,和批量sql语句求答案

2025-04-08 15:23:02
推荐回答(1个)
回答1:

------解决方案--------------------------------------------------------
Hibernate 是一个优秀的 ORM 框架,但不是高效的。
大数据量的查询,以及需要使用本地数据库语言对 SQL 进行逐步调优的应用不适合使用 Hibernate
------解决方案--------------------------------------------------------
仅仅是查询,没有问题。hibernate的分页也已经针对不同的数据库进行了优化的
比如oracle,hibernate就采用的是oracle最快的分页方式,具体的可以去看OracleDialect源代码
其他的数据库也是
get或者load是获取一条数据,这里都需要用延迟加载的
批量sql的时候,需要设置batch size,并且关闭二级缓存,同时使用flush来同步数据库,在使用clear来清空session缓存,这样不至于内存溢出
,hibernte文档上有这个例子
或者用存储过程,如果你了解hibernate你就会用他的长处,而避免其短处
------解决方案--------------------------------------------------------
hibernate的查询缓存key是查询语句,但是key对应的value其实是数据库表的主键
当查询被缓存后,再次调用查询的时候,通过key找到对应的id集合,然后一个一个的去class缓存中去load
class里没有,再去数据库中获取。所以这又涉及到类缓存上了,当用hibernate进行数据库的修改和删除等操作的时候,都会更新一二级缓存,所以查询缓存会获取最新的数据
------解决方案--------------------------------------------------------