Hibernate在并发更新或删除时使用合并

时间:2014-06-26 12:39:04

标签: hibernate jpa

有没有办法让我知道分离的实体是否在会话缓存中。我有以下情况。

public void method (Entity entityObject)
{
       //List Associated objects and do some process     
       Criteria criteria = session.createCriteria(GroupMembers.class);
       criteria.add(Restrictions.eq("group", group));
       criteria.createCriteria("group", "group", JoinType.LEFT_OUTER_JOIN);
       List<GroupMembers> members = (List<GroupMembers>) criteria.list();

          ...

        entityObject= (Entity) session.merge(entityObject);

        if (SomeCondition){
        session.delete(entityObject);
        }

}

除了以下场景外,大部分时间都可以正常工作。其中entityObject被另一个事务删除的地方。我想要的是session.delete(entityObject)失败,因为entityObject已被删除。但是,由于session.merge(entityObject),如果在缓存或数据库中找不到实体,则会将记录插入到数据库中,因此删除总是成功。


更新。 这有效,但我在开始时做了额外的选择......这是一个好方法吗?

public void method (Entity entityObject)
{
      Entity entityObjectCopy = session.get(Entity.class, entityObject.getId())

       if(entityObjectCopy == null)
       {
       //List Associated objects and do some process     
       Criteria criteria = session.createCriteria(GroupMembers.class);
       criteria.add(Restrictions.eq("group", group));
       criteria.createCriteria("group", "group", JoinType.LEFT_OUTER_JOIN);
       List<GroupMembers> members = (List<GroupMembers>) criteria.list();

          ...

        entityObject= (Entity) session.merge(entityObject);
        }    

        if (SomeCondition){
        session.delete(entityObject);
        }
}

0 个答案:

没有答案