sql >> データベース >  >> RDS >> Mysql

NHibernateQueryOver-結果が多すぎるコレクション

    彼がうまくいかないのではないかと心配しています。設計および<join>の性質による 。ドキュメントに記載されているとおり:

    (私は)の方法 この問題の解決は少し異なります。オブジェクトLanguageがあります 、オプションには言語のコレクションがあります

    public virtual IList<Language> Languages {get; set;}
    

    マッピングは、たとえば<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>
    

    秘訣はフィルターにあります 。これは、 whereの動的バージョンです。 マッピング属性(18.1。NHibernateフィルター)

    <filter-def name="LanguageFilter" >
      <filter-param name="languageId" type="Int32" />
    </filter-def>
    

    次に、現在のセッションのすべての操作に対して、フィルターをオンにすることができます。言語IDがわかっているAOP内で、リクエストごとに1回だけ(Webアプリの場合):

    var filter = session.EnableFilter("LanguageFilter");
    filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
    

    そして最後に、Languagesコレクションにはレコードが1つしか含まれておらず、いつでも.First()にアクセスできることがわかります。 。より多くの言語で複数の結果がなくなる

    参照: https://stackoverflow.com/a/16625867/1679310 https://stackoverflow.com/a/18479266/1679310




    1. 誤った結果のクエリを更新する

    2. 他のマシンからMySQLに接続する

    3. MySQLがインストールされていないコンピュータでMySQLDBを使用してJavaアプリケーションを実行するにはどうすればよいですか?

    4. mysql:再注文せずにLEFTJOINの後にORDERBYを保存する方法は?