本文共 1084 字,大约阅读时间需要 3 分钟。
Hibernate中处于managed/persistent状态的Entity对象,通过持久化上下文(如Session或EntityManager)能够自动关联到数据库中的对象。这样,在Hibernate应用中对managed/persistent状态的Entity对象的操作将会同步到数据库中。
但是,当需要批量修改大量Entity对象时,这种对各个Entity对象的自动同步将会造成数据库性能压力。为此,可以使managed/persistent状态的Entity对象转变为detached状态的Entity对象,从而避免自动同步。这样,在Hibernate应用需要的时候再明确调用saveOrUpdate()或update()方法实现数据的再次同步。
使managed/persistent状态的Entity对象转变为detached状态的Entity对象,可以对Entity对象执行evict()操作(对于Session)或detach()操作(对于EntityManager),示例如下。
对于Hibernate的Native API,示例如下:
Session session = entityManager.unwrap( Session.class );for(Person person : (List对于Hibernate的JPA API,示例如下:) session.createQuery("select p from Person p").list()) { dtos.add(toDTO(person)); session.evict( person );}
for(Person person : entityManager.createQuery("select p from Person p", Person.class) .getResultList()) { dtos.add(toDTO(person)); entityManager.detach( person );}如果要将持久化上下文(如Session或EntityManager)中的所有Entity对象都转换为detached状态,则还可以对 Session或EntityManager执行clear()操作。
对于Hibernate的Native API,示例如下:
session.clear();对于Hibernate的JPA API,示例如下:
entityManager.clear();
转载地址:http://iilai.baihongyu.com/