두 엔터티가 Post
및 Tag
입니다. Post
엔티티는 둘 사이의 다 대다 조인을 나타내는 태그 모음을 가지고 있습니다 (즉, 각 게시물은 여러 개의 태그를 가질 수 있으며 각 태그는 여러 개의 게시물과 연관 될 수 있습니다).NHibernate에서 many-to-many 연관을 통해 질의하는 방법은 무엇입니까?
주어진 태그가있는 모든 게시물을 검색하려고합니다. 그러나, 나는이 쿼리를 바로 얻을 수없는 것 같습니다.
이from Posts p
where p.Tags contains (from Tags t where t.Name = :tagName)
order by p.DateTime
도이 접근 내가 찾은 유일한 것은 a post by Ayende이다 : 나는 기본적으로 다음과 같은 의사 HQL과 같은 의미 무언가를 원한다. 그러나, 그의 접근법은 상대방 (나의 경우에는 Tag
)의 엔티티가 many-to-many의 다른 끝을 보여주는 콜렉션을 가질 것을 요구한다. 나는 이것을 갖고 싶지 않고 정말로 가지고 싶다. 나는 이것이 할 수 없다고 믿는 것이 어렵다고 느낍니다. 내가 뭘 놓치고 있니?
내 기관 & 매핑 (간체) 같이 : 나는 답을 찾은 것 같은
public class Post {
public virtual int Id { get; set; }
public virtual string Title { get; set; }
private IList<Tag> tags = new List<Tag>();
public virtual IEnumerable<Tag> Tags {
get { return tags; }
}
public virtual void AddTag(Tag tag) {
this.tags.Add(tag);
}
}
public class PostMap : ClassMap<Post> {
public PostMap() {
Id(x => x.Id).GeneratedBy.HiLo("99");
Map(x => x.Title);
HasManyToMany(x => x.Tags);
}
}
// ----
public class Tag {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class TagMap : ClassMap<Tag> {
public TagMap() {
Id(x => x.Id).GeneratedBy.HiLo("99");
Map(x => x.Name).Unique();
}
}