문제

게시물과 태그 사이 (ActiveRecord 속성 HasandBelongstomany를 사용하여) (무고한 것을 보호하기 위해 도메인 객체 이름이 변경됨)와 같은 방법을 원한다고 가정 해 봅시다.

FindAllPostByTags(IList<Tag> tags)
매개 변수에 태그가있는 모든 게시물을 반환합니다. nhibernate 표현식 또는 HQL로 이것을 달성 할 수있는 방법은 무엇입니까? HQL 문서를 검색했으며 내 요구에 맞는 것을 찾을 수 없었습니다. 나는 단지 분명한 것을 놓치기를 바랍니다!

도움이 되었습니까?

해결책

당신은 또한 만 사용할 수 있습니다 IN 성명

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

오류가 발생할 수 있도록 컴파일하지 않았습니다

다른 팁

나는 지금 당장 성 설치 시스템이 없으므로 이것을 테스트하거나 컴파일하지 않았지만 아래 코드는 원하는 것을 수행해야합니다.

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

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

방금 같은 문제가 있었고 HQL 문서화를 읽으려고했지만 일부 기능은 nhibernate (예 : Keyword와 함께)에서 구현되지 않은 것 같습니다.

나는 이런 종류의 해결책으로 끝났다 :

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

즉, 각 태그에 대한 조인을 사용하여 HQL을 동적으로 구축 한 다음 WHERE 절에서 선택하십시오. 이것은 나를 위해 효과가있었습니다. 나는 분리 기업으로 같은 일을 시도했지만 테이블에 여러 번 합류하려고 할 때 어려움을 겪었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top