Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

NHibernate QueryOver - bộ sưu tập có quá nhiều kết quả

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm các trang từ một cột

  2. Đếm tổng theo năm và tháng

  3. AngularJS &Laravel 4.2 truy xuất dữ liệu từ nhiều bảng và nối chúng

  4. In một hàng ngẫu nhiên từ truy vấn mysql

  5. MySQL Hiển thị các hàng tồn tại trong một bảng nhưng không tồn tại trong bảng khác