Tôi cần sao chép truy vấn HQL đang hoạt động sau đây bằng API tiêu chí.Các dự báo hỗ trợ API Tiêu chuẩn NHibernate có thuộc tính bộ sưu tập không?
session.CreateQuery(
"select c " +
"from Parent p " +
"inner join p.Children c " +
"where p.Id = 9 " +
"and c.Id = 33")
.SetMaxResults(3)
.List();
Truy vấn chọn tất cả các trẻ em đáp ứng các tiêu chí nhất định thuộc về cha mẹ đáp ứng tiêu chí khác. Trong ví dụ của tôi, cả hai tiêu chí là những điểm cân bằng đơn giản nhưng chúng có thể là bất kỳ thứ gì.
Vì lý do nào đó truy vấn API tiêu chí tương đương trả về danh sách có số lượng mục phù hợp nhưng các mục đó đều rỗng.
session.CreateCriteria(typeof (Parent))
.Add(Restrictions.Eq("Id", 9))
.CreateCriteria("Children")
.Add(Restrictions.Eq("Id", 33))
.SetProjection(Projections.Property("Children"))
.SetMaxResults(3)
.List();
Tại sao hai truy vấn này không trả về cùng một kết quả?
Đây là SQL tạo ra từ các truy vấn HQL:
SELECT TOP 3 childid7_,
name7_
FROM (SELECT children1_.childid AS childid7_,
children1_.name AS name7_,
Row_number()
OVER(ORDER BY current_timestamp) AS __hibernate_sort_row
FROM dbo.parent parent0_
LEFT OUTER JOIN dbo.child children1_
ON parent0_.parentid = children1_.parentid
WHERE (parent0_.parentid = 9)
AND (children1_.childid = 33)) AS QUERY
WHERE QUERY.__hibernate_sort_row > 0
ORDER BY QUERY.__hibernate_sort_row
Và đây là SQL từ truy vấn Tiêu chuẩn API:
SELECT TOP 3 y0_
FROM (SELECT this_.parentid AS y0_,
Row_number()
OVER(ORDER BY current_timestamp) AS __hibernate_sort_row
FROM dbo.parent this_
INNER JOIN dbo.child child1_
ON this_.parentid = child1_.parentid
WHERE this_.parentid = @p0
AND child1_.childid = @p1) AS QUERY
WHERE QUERY.__hibernate_sort_row > 0
ORDER BY QUERY.__hibernate_sort_row
Lưu ý rằng tham gia giữa cha mẹ và con là một chiều. Thực thể con không có thuộc tính tham chiếu trỏ đến cha mẹ của nó.
Ai có thể đề xuất giải pháp thay thế cho phép tôi làm việc xung quanh giới hạn này?
Tại sao có child1_.childid> @ p1 trong truy vấn từ API tiêu chí? –
Rất tiếc, đó phải là bằng. –