2009-03-16 3 views
0

나는 캐싱하기를 원하는 매우 간단한 Country 엔티티를 가지고 있습니다. 이것은 완벽하게 작동하지만 캐시 된 인스턴스의 복제본 버전이 반환되거나 개발자가 상태를 변경하지 못하도록 읽기 전용으로 만들어야합니다.유창한 매핑과 Syscache2 second level 캐싱을 사용하는 Hibernate

어떻게하면 좋을까요? 필자는 Fluent Readonly() 메소드가이를 강제 할 것을 강요했지만, 사실이 아닙니다.

샘플 유창함 매핑 :

 Id(x => x.Id); 
     Map(x => x.Name).WithLengthOf(50).Not.Nullable().Unique(); 
     Map(x => x.IsoCode).WithLengthOf(10).Not.Nullable().Unique(); 
     HasMany(x => x.States).Cascade.None().LazyLoad();   
     Cache.AsReadOnly(); 

내 단위 테스트는 명확하게 실체가 캐시되는 동일한 엔티티가 후속 취득에 반환을 나타냅니다,하지만 난이 지속로드 된 후에는 개체가 불변 할 저장.

감사합니다.

답변

3

개체 인스턴스를 수정할 수 없다는 의미에서 클래스의 인스턴스를 변경하지 못하게하려면 클래스를 NHib 또는 Fluent NHib와 관련이 없도록 작성해야합니다. 예를 들어, NHib를 개인 필드 또는 사유 재산 설정자에 매핑하고 속성 getter 만 공개합니다.

NHib를 사용하면 클래스 매핑에 "mutable = false"를 지정할 수 있습니다 (FNH로 수행하는 방법을 모르겠 음). 이것은 런타임에 객체를 변경하지 않지만 NHib에 이러한 엔티티에 대한 삽입, 업데이트 및 삭제를 검사하지 않도록 알립니다.

관련 문제