2012-01-16 1 views
0

У меня есть два Entities (энтити simplefied):Выберите, если значение не в объединенной таблице

Участие

[ActiveRecord]  
public class Participation 
{ 
    [PrimaryKey] 
    public int Id {get;set;} 

    [HasMany(...)] 
    public IList<ParticipationEvent> GeneratedEvents {get;set;} 
} 

И ParticipationEvent

[ActiveRecord]  
public class ParticipationEvent 
{ 
    [PrimaryKey] 
    public int Id {get;set;} 

    [BelongsTo] 
    public ProgramParticipation {get;set;} 

    [Property] 
    public int Code {get;set;} 
} 

где (как вы можете видеть) а Участие имеет много событий. Каждое событие имеет уникальный код.

Я хочу, чтобы выбрать все Участие, у которого нет конкретного события. Как я могу это сделать с NHibernate? Я знаю, что могу использовать INNER JOIN, чтобы легко получить все экземпляры с определенным событием, но можно ли это сделать наоборот?

ответ

1

Hibernate/NHibernate поддерживает LEFT OUTER JOIN, который выбирает все записи в таблице A, соединенные с таблицей B, даже если B не имеет аналога. Чтобы получить эти записи в A, которые не находятся в B, просто добавьте WHERE tableB.SoleNonNullableColumn IS NULL. Единственный способ, которым столбец с непустым значением может быть нулевым, - это из-за строки в LEFT OUTER JOIN, где tableB вообще не отображается.

+0

Что должно быть SoleNonNullableColumn в моем случае? Я не уверен, какой будет точный HQL. – Pbirkoff

+0

«Ид», вероятно, хороший кандидат. {where ParticipationEvent.Id IS NULL}. См. Документацию по HQL для общей информации: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html – sfuqua

Смежные вопросы