在浏览hibernate文档并阅读只读实体时,以下hibernate official documentation说,
Hibernate对只读实体进行了一些优化:
我不明白deleting database snapshots
是什么意思。
它是指数据库中发生的一些优化吗?如果是这样,hibernate如何通知/提示数据库进行优化?此优化是否是特定于数据库的功能,因此无法保证数据库的安全性?
或者它是指在hibernate库中发生的优化?我怀疑是这种情况,因为它是否是readOnly或者hibernate为获取记录而触发的查询是相同的,但是想确保我在这里没有遗漏任何东西。
更新:根据@tgdavies的回答,它有助于休眠不保留快照,因为不需要进行脏检查。
随后想了解JDBC readOnly和hibernate readOnly之间是否存在任何链接以启用db优化。根据它所说的Connection.html#setReadOnly - Puts this connection in read-only mode as a hint to the driver to enable database optimizations.
。那些提示是什么?
有人可以说明如何实现这种优化。
答案 0 :(得分:1)
当Hibernate将对象加载到Session中时,它会创建对象当前数据库状态的状态快照,以便它可以对快照执行脏检查。
由于永远不会修改只读对象,因此不需要此快照,可以保存内存。
这不是与数据库访问相关的优化,而是减少会话使用的内存。
我怀疑Hibernate将JDBC连接设置为只读 - Hibernate不知道Session中还会发生什么。您可以记录SQL Hibernate发送的SQL以确保:How to log final SQL queries with hibernate
我不确定数据库可以在只读连接上执行哪些优化 - 可能在某些隔离模式下占用更少的锁,但这只是我挥手。