2011-04-27 2 views
1

NHibernate에서 QueryOver를 사용하여 쿼리를 만들려고 노력하고 있습니다.nhibernate에서 쿼리 오버와 결합하기

select mn.Story_ID from Membership_Updates mn 
join Updates upd on mn.Story_ID = upd.Story_ID 
where mn.MembershipUser_ID = 1 
group by mn.Story_ID having MAX(mn.DismissTime) <= MAX(upd.CreationDate) 

내 클래스 : 내가 얻을 필요가 결과 SQL은 다음과 같다 어쩌면 내가 뭔가를 분명 누락

public class MembershipUpdates 
{ 
    public MembershipUpdates() 
    { 
    DismissTime = DateTime.Now; 
    } 

    public virtual int Id { get; set; } 
    public virtual MembershipUser User { get; set; } 
    public virtual Story Story { get; set; } 
    public virtual DateTime DismissTime { get; set; } 
} 

public class Updates 
{ 
    public Updates() 
    { 
    CreationDate = DateTime.Now; 
    } 

    public virtual int Id { get; set; } 
    public virtual DateTime CreationDate { get; private set; } 
    public virtual Story Story { get; set; } 
    public virtual string Message{ get; set; } 
} 

답변

2

내가 잘못 될 수도 있지만 그렇게하지 QueryOver를 사용하면 관련이없는 엔티티에 가입 할 수 있다고 생각합니다 (즉, 서브 쿼리를 사용하지 않고).

나는이를 위해 HQL을 사용합니다 :

select mn.Story 
from MembershipUpdates mn, Updates upd 
where upd.Story = upd.Story 
and mn.User.id = 1 
group by mn.Story 
having MAX(mn.DismissTime) <= MAX(upd.CreationDate) 

(!) 참고 : 당신의 엔티티 클래스 이름은 단수해야합니다.

+0

감사합니다. 나는 그것을 두려워했다. HQL은 다음과 같습니다 :) – Iridio