session.clear()在Hibernate中如何工作

session.clear()在Hibernate中如何工作,第1张

session.clear()在Hibernate中如何工作

可以将会话视为自开始当前事务以来已经从数据库加载(或持久存储到)的实体的缓存。

  1. Session.clear
    并非以任何方式强制执行,但是如果您在一个事务中执行大量实体加载/保存 *** 作,则很有用,以避免出现内存不足错误。在您的示例中,您将
    employee
    在会话中复制50个实体。如果没有
    flush
    and
    clear
    方法调用,则每50个对象中
    save()
    您将有100.000个实体在会话中复制(并且不是垃圾回收的,因为会话具有指向该实体的链接)。

  2. Session.clear
    将不会执行提交或回滚。甚至都不是
    flush
    (因此,为什么您应该在之前进行刷新
    Session.clear
    ,以便hibernate生成SQL查询来查询未决的实体更新。

  3. 回滚或提交 *** 作不是在应用程序端执行的,而是在数据库中执行:hibernate只会要求数据库进行提交或回滚(Hibernate可能会在提交 *** 作之前触发刷新,但刷新不属于提交的一部分)。提交 *** 作将(也无法)访问会话。这是一种数据库内部机制,由于自事务开始以来运行了所有SQL查询,因此该数据库内部机制将保留(或还原)执行的数据修改。

完全以相同的方式,在hibernate状态下打开事务并没有执行很多 *** 作:主要是从池中获取数据库连接,并告诉数据库 不要

auto_commit
遵循sql查询,而是等待提交或回滚命令。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5019725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存