2008-09-24 5 views
3

게시물과 태그 (무죄를 보호하기 위해 도메인 객체 이름이 변경됨) 사이에 ActiveRecord 속성 HasAndBelongsToMany를 사용하여 다 대다 관계가 있다고 가정 해 봅시다. C# + 성 ActiveRecord : HasAndBelongsToMany 및 콜렉션

FindAllPostByTags(IList<Tag> tags)
과 같은 메소드가 필요했습니다. 이 태그는 매개 변수에 태그가 모두 포함 된 모든 게시물을 반환합니다. 어떤 식 으로든 NHibernate Expressions 또는 HQL을 사용하여이 작업을 수행 할 수 있습니까? 나는 HQL 문서를 조사했고 나의 필요에 맞는 것을 찾을 수 없었다. 나는 분명히 뭔가 빠져 있었으면 좋겠다.

+0

아래에 어떤 대답이 있습니까? 그렇다면, 호의를 표한 사람에게 호의를 베풀고 그것을 받아들입니다. 당신도 그 일을함으로써 더 많은 회신을 받게 될 것입니다. –

+0

이것은 오래 전에 기억하지 못했지만 결국에는 다른 접근 방식을 취하거나 그 문제를 해결했다고 생각합니다. 나는 대답으로 그것을 제출할 생각을했으면 좋겠다. :( – adamjford

답변

2

은 또한 그냥 그래서 난 그냥 같은 문제가 있었다 오류

0

현재 성 설치와 함께 시스템이 준비되어 있지 않으므로 테스트 또는 컴파일하지 않았지만 아래 코드는 원하는 작업을 수행해야합니다.

Junction c = Expression.Conjunction(); 
foreach(Tag t in tags) 
    c = c.Add(Expression.Eq("Tag", t); 

return sess.CreateCriteria(typeof(Post)).Add(c).List(); 
0

을 가질 수있는 컴파일하고 HQL-를 읽을 시도하지 않은 IN

DetachedCriteria query = DetachedCriteria.For<Post>(); 
query.CreateCriteria("Post").Add(Expression.In("TagName", string.Join(",",tags.ToArray())); 

를 사용할 수 있습니다 문서, 그러나 기능 중 일부는 NHibernate에서 구현되지 않는 것 같습니다 (예 : with 키워드)

나는 이런 종류의 솔루션으로 끝났습니다 :

 
select p 
FROM Post p 
JOIN p.Tags tag1 
JOIN p.Tags tag2 
WHERE 
    tag1.Id = 1 
    tag2.Id = 2 

의미, 각 태그에 대해 join을 사용하여 동적으로 HQL을 빌드 한 다음 WHERE 절에서 선택하십시오. 이것은 나를 위해 일했다. 나는 DetachedCriteria로 같은 일을 시도했지만 테이블에 여러 번 가입하려고 할 때 문제가 발생했습니다.

관련 문제