私はシンプルなモデルを設定しました:複数のイメージを持つドキュメントエンティティ。イメージは別のデータベースに保存され、他のレガシーアプリケーションから更新されるため、私のアプリケーションは読み取り専用アクセスしかできません。私はsynonimをセットアップして、別のサーバのイメージテーブルをローカルテーブルとして使用できるようにしました。 私のマッピングは次のとおりです。NHibernateセッションファクトリを構築するときに、なぜ「変更可能に構成された読み取り専用キャッシュ」を取得するのですか?
<class name="Image" mutable="false" table="ImageExternal">
<cache region="images" usage="read-only" />
<id name="Id">
<generator class="assigned" />
</id>
<property name="Name" update="false" />
<!-- other properties -->
</class>
<class name="Document" table="Document">
<id name="Id">
<generator class="guid.comb" />
</id>
<!-- other properties -->
<set name="Images" mutable="false">
<cache region="images" usage="read-only" />
<key column="some_guid_column" />
<one-to-many class="Image" />
</set>
</class>
画像クラス自体は変更可能ですが、私は保護フィールドへのアクセス戦略を変更することで、それは不変にすることができます。 イメージマッピングでmutable = "false"を設定しました。すべてのプロパティにupdate = "false"があり、親関係に設定されているイメージにもmutable = "false"とマークされています。 しかし、セッションファクトリを構築するときには、キャッシュの使用量が「読み取り専用」なので、「変更可能:画像用に設定された読み取り専用キャッシュ」という警告が表示されます。
したがって、いつ読み取り専用キャッシュを使用できますか? mutable = "false"コレクションと読み取り専用キャッシュは互換性がありますか? – Vasea
@Vasile、ドキュメントによるものではありません。クラスマッピングでは使用できますが、すでに定義されているコレクションマッピングでは使用できません。 – Vadim