Java Hibernate会话从缓存加载实体
我需要在第一次读取时锁定实体。i、 我将首先使用session.load读取实体,如果实体失败,则使用session.get。当会话第一次使用get读取实体时,我会将其标记为locked lock是transient属性,而不是持久化在DB中。我假设下次调用session.load时,我将从缓存中获取标记为锁定的实体,而不是再次从DB中检索它。但这并没有发生。session.load始终失败,并转到catch块以使用session.get。不知道我的理解错在哪里。谢谢你的帮助。如果有更好的方法来实现这一点,也请向我提出建议Java Hibernate会话从缓存加载实体,java,hibernate,spring-mvc,locking,Java,Hibernate,Spring Mvc,Locking,我需要在第一次读取时锁定实体。i、 我将首先使用session.load读取实体,如果实体失败,则使用session.get。当会话第一次使用get读取实体时,我会将其标记为locked lock是transient属性,而不是持久化在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);
我认为您上面使用的策略在多用户或集群环境中不起作用
您应该考虑使用它可以将数据库级锁应用到数据。
Load为您提供代理对象。如果对象不在数据库中,则在访问entities方法时将引发异常