第一级hibernate缓存,直接在DB上修改记录

时间:2009-12-01 09:55:44

标签: java hibernate

对于第一级缓存,我理解的是当我们执行saveorupdate时,我们需要调用flush()来刷新缓存,以便后续从DB中选择查询。因此,对于使用hibernate的应用程序,我们不应该使用DB-GUI修改记录/删除记录而不通过hibernate ,因为select会因为缓存而查询错误的结果。正确的吗?

2 个答案:

答案 0 :(得分:3)

不正确的。第一级缓存始终与自身一致,并与该会话中的更新一致。会话关闭后,所有剩余的更新都会自动刷新,您很少需要自己致电flush()

此外,第一级缓存仅持续休眠会话的持续时间(通常只持续几个SQL语句,通常持续不到一秒),因此对数据库进行的任何更新都将是反映在下一个开始的hibernate会话中。

答案 1 :(得分:1)

如果FlushMode设置为Auto,则应该在进行任何可能受影响的HQL或条件查询之前进行刷新。如果您正在进行SQL查询(或者您正在进行HQL查询而FlushMode不是自动的),则需要刷新,否则当SQL查询发生时,更改将不会反映在数据库中。

此外,如果您没有使用交易,则需要在处理会话之前调用flush。

查看https://www.hibernate.org/hib_docs/v3/api/org/hibernate/FlushMode.html