Hibernate中操作managed/persistent状态的Entity对象使之成为detached状态的Entity对象

来源:互联网 发布:支付宝 api端口号 编辑:程序博客网 时间:2024/06/11 21:47

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<Person>) session.createQuery("select p from Person p").list()) {    dtos.add(toDTO(person));    session.evict( person );}

对于Hibernate的JPA API,示例如下:

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();

1 0
原创粉丝点击