Tôi đang cố gắng thể hiện một truy vấn SQL bằng cách sử dụng API Tiêu chuẩn của NHibernate, và tôi đang gặp khó khăn vì tôi đang nghĩ theo cách cơ sở dữ liệu trung tâm trong khi NHibernate là đối tượng làm trung tâm.Tôi làm cách nào để thể hiện việc tham gia vào một truy vấn phụ được nhóm bằng NHibernate?
SQL (hoạt động tuyệt vời):
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
inner join
(select max(innerT.id)
from tbl innerT
group by innerT.col1) grpT
on outerT.id = grpT.id
Về cơ bản, đây là một tự tham gia của một bảng chống lại một tập hợp con của chính nó. Tôi cho rằng tôi có thể thử biến sự tự tham gia thành một hạn chế:
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
where outerT.id in (select max(innerT.id) from tbl innerT group by innerT.col1)
Nhưng tôi không chắc chắn cách thể hiện bằng cách sử dụng NHibernate; Tôi đang chiến đấu với ProjectionList của DetachedCriteria và chỉ muốn chọn max(id)
trong khi nhóm theo col1
.
Cảm ơn rất nhiều vì đề xuất của bạn!
Bạn có thực sự cần sử dụng Tiêu chí không? HQL có thể phù hợp hơn. –
Thành thật mà nói, đối với các loại truy vấn này - hãy lưu trữ tóc của bạn và sử dụng HQL hoặc SQL thuần tuý (với CreateSqlQuery). – cbp
Vì truy vấn phụ dẫn đến một tập hợp các vô hướng thay vì các thực thể được ánh xạ, tôi sẽ thể hiện sự tham gia trong HQL như thế nào? –