2012-02-09 9 views
0

多対1の関係で二次キャッシュを使用するようにnHibernateを取得しようとしていますが、設定方法に関する明確な説明は見つかりませんそれは正しく。私はこのHow to get nhibernate to cache tables referenced via many-to-one - is my config correct?を見つけましたが、提供されているsJHonnyの例は1対多のものであり、私がそれを採用したときにはうまく動作しません。この件に関しては他にも記事がありますが、それほど具体的なものはありません。多対1参照のためのnHibernate二次キャッシュの使用

私は作品を提供します(私は劇的に編集しなければなりませんでしたので、うまくいけばうまく動作します)。しかし、参照オブジェクトは、DataObjectが照会されるときに取り出されるときだけキャッシュされます。私は知っていると思います1)/どのようにLookupObjectコレクションをプリロードするには? 2)このコレクションをリージョンに割り当てて有効期限を設定すると、どこでキャッシュを再ロードするのですか? 3)nHibernateがLOOKUPテーブルとの結合を生成しないようなDataObjectのhbm.xmlを変更する方法。つまり、ルックアップオブジェクトではなく、LOOKUPではなく、DATA.LOOKUP_IDを取得するだけです。名?

LookupObject.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="BusinessObjects" assembly="BusinessObjects"> 
    <class name="LookupObject" table="LOOKUP" mutable="false" batch-size="20"> 
    <cache usage="read-only" /> 
    <id name="Id" column="ID" /> 
    <property name="Name" column="NAME" /> 
    </class> 
</hibernate-mapping> 

DataObject.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="BusinessObjects" assembly="BusinessObjects"> 
    <class name="DataObject" 
     table="DATA" mutable="false"> 
    <composite-id> 
     <key-property name="Id" column="ID"/> 
     <key-property name="Date" column="DATE" type="Date"/> 
    </composite-id> 
    <many-to-one name="LookupObject" not-null="true" column="LOOKUP_ID" fetch="join"> 
    </class> 
</hibernate-mapping> 

答えて

0

私は私自身の質問に答え信じています。 1)コレクション全体をプリロードするには、ルックアップのリスト全体が常にDBから取得されキャッシュされるようにコードを変更する必要がありました.LINQを使用して個別オブジェクトをIDで取得します。 2)以前と同じです。 3)これはまだテストしていませんが、多対1の要素からfetch = "join"を削除する必要があります。そうしないと、SQL結合が生成され、データが返されるためです。次に、キャッシュから取得することによって、nHibernateなしでルックアップオブジェクトを設定します。

関連する問題