2009년 3월 1일 일요일

NHibernate elements(), indices() for IDictionary

특정 엔티티에 Map으로 Composite Element가 연결되어 있을 때
예를 들어, 엔티티에 메타데이타 정보가 연결되어 있을 때 다음과 같이 사용합니다.

enterprise.Metadata["key"] = "value";

hbm에서는 map 이고, c#에서는 IDictionary 또는 IDictionary 로 표현합니다.

이때 특정 메타데이타를 가진 모든 엔티티를 조회하기 기능이 필요할 때가 있습니다.

메타데이타 값을 얻는 것은 조인으로 해결하면 되므로 매우 쉽습니다.

from Enterprise ent join ent.MetadataTable meta where meta.Value = :value

를 사용합니다.

그럼 특정 메타데이타 키를 가진 엔티티를 구하는 방법은? .... 이거 해결하느라 하루가 걸렸네요...

index나 key 에 해당하는 예약어가 있는 줄 알았는데 복수로 indices 라고 있네요... 쩝...

from Enterprise ent where :key in indices(ent.MetataTable)

이라고 하면 됩니다.

특정 키와 값을 모두 찾고 싶다면

from Enterprise ent where :meta in elements(ent.MetaTable)

라고 하면 됩니다.

댓글 없음: