NHibernateで数式を使用して計算プロパティを定義する場合、特にクエリのキャッシュに関して、数式がクエリの制限に応じて結果を変える場合、どのような影響がありますか?
具体的には、次の単純なC#クラスについて考えてみます。
public class Entity
{
public Entity() { }
public virtual int Id { get; protected set; }
public virtual string Key { get; protected set; }
public virtual string Value { get; protected set; }
public virtual int Rank { get; protected set; }
}
次の単純なNHibernateマッピングでマッピングされます。
<class name="Entity" mutable="false">
<id name="Id">
<generator class="native">
</id>
<property name="Key"/>
<property name="Value"/>
<property name="Rank" formula="row_number() over(order by value)">
</class>
hibernate.cache.use_query_cache
オプションがに設定されたセッションファクトリでtrue
実行し、次の方法でクエリを実行します。
ICriteria criteria = session.CreateCriteria(typeof(Entity));
criteria.SetCacheable(true);
criteria.SetCacheRegion("SearchResults");
IList<Entity> queryResult1 = criteria.List<Entity>();
criteria = session.CreateCriteria(typeof(Entity));
criteria.SetCacheable(true);
criteria.SetCacheRegion("SearchResults");
criteria.Add(Restrictions.Like("Key", "a", MatchMode.Anywhere));
IList<Entity> queryResult2 = criteria.List<Entity>();
Entity directResult = session.Load<Entity>(id);
NHibernateは、返されたエンティティに対して合理的な方法で動作しますか?または、あるキャッシュされたクエリの「ランク」値が、クエリキャッシュのために、別のクエリのランク値を汚染する可能性がありますか?NHibernateマッピングでこのような式を使用する場合、他に懸念事項はありますか?
編集:
私の特定のケースでは、「エンティティ」は一流のビジネスエンティティではなく、一種のメタエンティティであることも注目に値するかもしれません。これは、他のファーストクラスエンティティのインデックス付きデータベースビューにマップされ、検索専用に使用されます(session.Load(id)呼び出しは考案されており、実際には発生しないはずです)。
そして、私が思うに、キャッシングに影響がある場合、潜在的な問題を回避するために、同様のユースケースに対してどのような代替案が存在する可能性がありますか?