나는 비슷한 질문에 대한 해답을 해석하려고 시도했지만 제대로 작동하지 못했습니다.NHibernate를 사용하여 many-to-many 컬렉션을 쿼리하는 방법은 무엇입니까?
나는 활동 목록과 각 활동을 참가자 목록으로 가지고 있습니다. 여기에 매핑은 다음과 같습니다
var crit = ModelSession.Current.CreateCriteria<Activity>()
.AddOrder(Order.Desc("Timestamp"))
.SetFirstResult(start)
.SetMaxResults(count);
지금 내가 특정 사람이 다른에 참여하는 활동 만 검색해야 : 나는 현재이 기준을 한 번에 활동에 열을 검색하고
<class name="Activity" lazy="false">
<id name="ID">
<generator class="guid" />
</id>
<list name="Participants">
<key column="Activity" />
<index column="Ord" />
<many-to-many column="Contact" class="Model.Contact" />
</list>
<property name="Timestamp" />
</class>
<class name="Contact" lazy="false">
<id name="ID">
<generator class="guid" />
</id>
<property name="Name" />
</class>
단어 : Contact.Name은 '% some_name %'을 (를) 좋아합니다.
select * from Activity where ID in (select p.Activity from Participants p,
Contact c where p.Contact=c.ID and c.Name like '%some_name%')
어떤 생각이 어떻게 나 페이징 결과와 순서를 유지할 수있는 방법으로, HQL 또는 ICriteria으로,이 작업을 수행하는 : 원시 SQL에서 나는 아마 다음처럼 작성할 것? 많은 감사합니다!
어젯밤에 CreateAlias ()를 시도했을 때 맹세 했었을 수도 있습니다. 어제 밤에 중복 된 레코드가 다시 나왔지만 아무 문제가 없었습니다. 나를 똑바로 설정해 주셔서 고마워요! – starkos
아니요, 아직 문제가 있습니다. 3 명의 참가자가있는 활동이있는 경우 결과 집합에 3 번 (각 참가자마다 한 번) 나타납니다. 따라서 조인은 각 페어링에 대한 레코드를 복제합니다. – starkos
죄송합니다. 오해했습니다. 위의 업데이트를 살펴보십시오. – ChssPly76