Hibernate会话从缓存加载实体

时间:2014-12-30 22:07:09

标签: java hibernate spring-mvc locking

我要求在第一次读取时锁定实体。即我首先使用session.load()来读取实体,如果失败,那么我使用session.get()。第一次使用get()通过会话读取实体时,我会将其标记为已锁定(锁定是瞬态属性,不会保留在DB中)。我假设下次调用session.load()时,我会从缓存中获取标记为已锁定的实体,而不是再次从DB中检索它。但这不会发生。 session.load()总是失败并转到catch块以使用session.get()。不知道我的理解错在哪里。感谢任何帮助。还建议我是否有更好的方法来实现这一目标。

        entity= service.load(id);
        try{
            entity.getBookingNo();
        }catch(LazyInitializationException e){
            entity= service.getById((id));
        }
        if(entity.getLock()){
            return "Record locked by another user";
        }
        entity.setLock(true);

1 个答案:

答案 0 :(得分:0)

我认为您上面使用的策略不适用于多用户或群集环境。

您应该考虑使用可以对数据应用数据库级别锁的Hibernate Pessimistic locking