java - hibernate的session怎样确保与数据库保持一致?
PHPz
PHPz 2017-04-18 09:48:21
0
3
405

hibernate里的session一级缓存,当一个用户通过get()load()等方法从数据库拿到某条数据,数据被缓存,此时第二个用户修改该条数据,数据库该数据被修改,此时第一个用户再get()该数据,从缓存中拿到数据,拿到的并不是实时的数据而是缓存的数据。这样想对不对?应该怎么解决?

PHPz
PHPz

学习是最好的投资!

모든 응답(3)
伊谢尔伦

맞습니다. 일반적으로 세션이 매우 짧습니다. 세션을 닫았다가 다시 열면 모든 캐시가 사라지기 때문입니다.

evict() 또는clear()를 사용하여 세션 내 캐시를 새로 고칠 수 있습니다

Peter_Zhu

세션 인터페이스는 새로 고침() 메서드를 정의합니다. get() 또는 load() 메서드를 호출하기 전에 이 메서드를 호출하면 최신 데이터를 얻을 수 있습니다.

阿神

최신 데이터를 얻는 방법은 위에 설명되어 있습니다. 내 제안은 세션이 먼저 데이터베이스 트랜잭션에 해당하고 트랜잭션 실행 시간이 최대한 짧아야 한다는 것입니다. 둘째, 세션 중 다른 곳에서 변경되는 데이터의 경우 공식적인 솔루션은 잠금 메커니즘을 사용하는 것입니다. 어느 정도의 트랜잭션 실패 및 롤백이 허용될 수 있는 경우 낙관적 잠금을 사용할 수 있으며 그렇지 않으면 원래 잠금을 고려할 수 있습니다. 포스터는 실제 솔루션을 제공할 것입니다. 응용 프로그램에 어떤 방법을 사용할지는 귀하에게 달려 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿