refresh
을 사용하여 엔티티를 다시로드 할 수도 있습니다. 또는 evict
및 clear
, @ Bosho가 언급했듯이
연결 풀을 사용하면 세션을 열고 닫는 오버 헤드가 크지 않습니다. 세션 공장을 구성하는 데 시간이 걸립니다.
세션을 닫고 다시 열 때의 문제점은 잘 기억한다면 이미로드 된 개체가 여전히 분리된다는 것입니다. 이것은 게으른 로딩에 문제가 될 수 있습니다. 따라서 세션을 열린 상태로 유지하고 evict
, clear
또는 refresh
을 사용하는 것이 좋습니다.
엔티티를 제거하고 이미로드 된 엔티티 중 하나에 액세스하면 이전 데이터가 계속 유지됩니다.
MyEntity e = session.load(...);
...
session.evict(e); // remove entity from the cache
String p = e.myProperty; // still the value at the time it was loaded
e = sesssion.load(...); // latest value
당신이 경우, 엔티티가 조작 언제 먼저 갱신되어야한다고 말한다 디자인 가이드 라인을 소개하는 것이 더있을 수 있습니다.
MyEntity e = session.load(...);
...
session.refresh(e); // refresh entity and cache
String p = e.myProperty; // latest value
e = sesssion.load(...); // latest value
위 코드는 의사 코드 일 뿐이므로 확인하지 않았습니다.
세션이 특정 시간 동안 열리면 캐시가 커질 수 있으므로이 경우 여전히 clear
수 있습니다. 일반적으로 말하자면 캐시 증가 문제와 연결 시간 제한, 트랜잭션 시간 초과 및 잠금 경합 문제를 방지하기 위해 세션을 짧게 유지하는 것이 좋습니다.
나에게 세션 관련 및 비용에 관해 읽을만한 자료를 제공해 주시겠습니까? 나는 운이없이 그것을 봤다. – Gaurav