Tôi sợ rằng nó sẽ không hoạt động. Theo thiết kế và bản chất của <join>
. Như đã nêu trong tài liệu:
Cách làm thế nào để (Tôi làm) giải quyết vấn đề này là một chút khác nhau. Tôi có một đối tượng Language
, Tùy chọn có bộ sưu tập ngôn ngữ
public virtual IList<Language> Languages {get; set;}
Ánh xạ ví dụ là <bag>
<bag name="Languages" batch-size="25"
cascade="all-delete-orphan" inverse="true" >
<key column="option_id" />
<one-to-many class="Language" />
<filter name="LanguagFilter" condition=":languageId = LanguageId" />
</bag>
Bí quyết nằm trong bộ lọc . Đây là phiên bản động của where thuộc tính ánh xạ (18.1. Bộ lọc NHibernate)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Sau đó, chúng ta có thể bật bộ lọc cho tất cả các hoạt động của phiên hiện tại. Chỉ một lần cho mỗi yêu cầu (nếu ứng dụng web), bên trong một số AOP, nơi chúng tôi biết id ngôn ngữ:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
Và cuối cùng, chúng tôi biết rằng bộ sưu tập Các ngôn ngữ chỉ chứa một bản ghi và chúng tôi luôn có thể truy cập .First()
. Không có nhiều kết quả với nhiều ngôn ngữ hơn
Ngoài ra, hãy xem: https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310