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

Hibernate 在并发更新或删除时使用合并休眠,hibernate,jpa,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", gr

有没有办法让我知道会话缓存中是否有分离的实体。我有下面的场景

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.createCriteria(GroupMembers.class);
标准。添加(限制。情商(“集团”,集团));
criteria.createCriteria(“组”、“组”、JoinType.LEFT\u OUTER\u JOIN);
列表成员=(列表)条件。列表();
...
entityObject=(实体)会话。合并(entityObject);
如果(某些条件){
删除(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);
        }
}
公共作废方法(实体entityObject)
{
实体entityObjectCopy=session.get(Entity.class,entityObject.getId())
if(entityObjectCopy==null)
{
//列出关联的对象并进行一些处理
条件=session.createCriteria(GroupMembers.class);
标准。添加(限制。情商(“集团”,集团));
criteria.createCriteria(“组”、“组”、JoinType.LEFT\u OUTER\u JOIN);
列表成员=(列表)条件。列表();
...
entityObject=(实体)会话。合并(entityObject);
}    
如果(某些条件){
删除(entityObject);
}
}

如何使用
refresh(Object Object)
方法而不是
merge()
?@Suninsky我尝试了刷新,但得到了异常org.hibernate.ununiqueobjectexception:具有相同标识符值的不同对象已与session@Suninsky请注意,这就是我最初使用合并的原因。加载关联对象时,会加载具有相同标识符的组实体。