`

evict终于用了一次

 
阅读更多
evict方法用于从HibernateSession中移除一个持久化对象。

该对象状态由持久化状态变为游离态。


在更新的时候调用了saveOrUpdate方法会将一个临时对象持久化,但同事在加日志时要得到修改前对象,所以在我update之前get了一下,此时update报错:a different object with the same identifier value was already associated with the session;

因为get时通过ID将其放入了缓存,saveOrUpdate又要将同一ID对象放入缓存,所以报错。

解决方法:
    在get后将得到的对象从缓存中evict。
分享到:
评论

相关推荐

    在Hibernate应用中处理批量更新和批量删除

    1. **使用`flush()`和`evict()`方法**:在修改实体后,主动调用`session.flush()`方法,使Hibernate将缓存中的变更同步到数据库,然后调用`session.evict(entity)`方法,从缓存中移除实体,这样下一次操作不会受到...

    Hibernate性能优化:一级缓存

    2. 同一次会话中,再次尝试加载该对象时,Hibernate会首先检查一级缓存,如果找到就直接返回,避免了数据库查询。 3. 一级缓存是本地缓存,因此只对当前会话可见,当会话关闭时,一级缓存中的所有对象也会随之清除。...

    Hibernatehibernate一级缓存.pdf

    在处理大量数据时,一次性将所有实体数据入库可能导致内存溢出。为了避免这种情况,可以采取以下策略: 1. 分批处理:先flush(提交当前事务),再clear(清空缓存),这样每次只处理一部分数据,然后释放内存。 2...

    jsp Hibernate批量更新和批量删除处理代码.docx

    首先,一次性加载大量对象到内存可能导致内存压力,尤其是在处理大规模数据时。其次,每个update语句仅更新单个记录,导致了大量的数据库交互,降低了性能。 为了解决这些问题,一种改进的方法是使用JDBC API直接...

    Hibernate缓存机制解说

    一级缓存也称为Session缓存,它在同一个Session中对数据的多次读取操作只需要一次数据库查询。这是一次事务范围内的缓存,由Hibernate自动管理,无需额外配置。当应用程序通过Session的save()、update()、...

    java-hibernate持久化

    // 第一次查询,缓存中没有,会执行SQL Book book2 = (Book) session.get(Book.class, 1); // 第二次查询,对象已在缓存中,不会执行SQL ``` 一级缓存的数据会在以下情况被刷新到数据库: - 事务提交(`transaction....

    在Hibernate中处理批量更新和批量删除

    这样做可以确保每个更新操作仅执行一次,并且避免了持久化上下文中的内存浪费。 ```java Transaction tx = session.beginTransaction(); Iterator<Customer> customers = session.createQuery("from Customer c ...

    Hibernate对象

    在Java的持久化框架Hibernate中,对象的状态管理是其核心概念之一,因为它直接影响到对象与...例如,当处理大量对象时,可以先将对象设置为游离状态,待所有更改完成后再一次性提交,以减少数据库事务的频繁交互。

    Hibernate缓存机制

    - “N+1”中的“1”是指第一次查询,而“N”则是指后续每次查询数据库获取单条记录的次数。 #### 二、缓存使用注意事项 **2.1 效率问题** - 使用Hibernate缓存需要注意效率问题,尤其是在进行更新操作时: - ...

    三大框架之一Hibernate 介绍

    SessionFactory在程序启动时一次性初始化,之后在整个应用生命周期中复用,提高了性能。 3. **Session**:Session是与数据库交互的主要接口,每个Session对应一个数据库事务。它包含了Hibernate的一级缓存,用于...

    hibernate的缓冲介绍.doc

    这个缓存是事务范围的,即在一次事务中创建的对象只存在于当前事务的 Session 缓存中。一级缓存主要由 Hibernate 内部管理,通常开发者无需直接干预。当对象通过 Session 的 `save()`, `update()`, `get()`, `load()...

    CacheSim-master_java_cache仿真_cache仿真程序_cache_

    1. 哈希表:存储数据项,键为数据地址,值为数据本身及其最后一次访问的时间戳。 2. 链表:按照访问时间排序,新访问的数据项被插入链表头部,链表尾部的数据项是最久未被访问的。 3. `get()`方法:根据数据地址查询...

    可以运行的Nhibernate例子+SQL2000数据库

    3. **会话(Session)**:会话是Nhibernate的核心组件,它是应用程序和持久化存储之间的一次交互。会话负责管理对象的状态,包括加载、保存、更新和删除对象。 4. **查询(Querying)**:Nhibernate提供了多种查询...

    Hibernate缓存机制探讨.doc

    - **管理**:尽管一级缓存是自动维护的,但开发者可以通过 Session 的 `evict()` 和 `clear()` 方法手动干预缓存管理。 - `evict()`:从缓存中移除特定对象。 - `clear()`:清空整个缓存。在处理大量数据时,定期...

    hibernat-session方法

    11. **session.save()的多次调用** - 在`reSave()`方法中,对同一个未持久化的对象连续调用`session.save(customer)`,实际只会触发一次数据库插入操作,因为对象尚未与数据库关联,所以第二次调用会被视为更新,但...

    Hibernate 使用缓存时,数据同步问题

    4. **清除缓存**:在必要的时候,可以显式地调用`Session.clear()`方法清除一级缓存,或者使用`SessionFactory.evict()`方法清除二级缓存中的特定实体,以确保下一次操作时能获取到最新的数据。 5. **配置缓存模式*...

    HIBERNATE的缓存机制

    这意味着在同一个Session内,对同一对象的多次读取和写入都会在缓存内完成,无需重复查询数据库。每个持久化类实例都有唯一的OID(对象标识符),确保了数据的唯一性。当事务结束时,Session会将所有未提交的更改...

Global site tag (gtag.js) - Google Analytics