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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值