2

私は休止状態に慣れていないので、ehCache を使用して第 2 レベルのキャッシュを実装しようとしています。L2 キャッシュを使用して多対 1 の関連付けを取得しようとすると、問題が発生します。私の foo.hbm.xml ファイルの関連付けマッピングは次のようになります。

<hibernate-mapping>
    <class name="com.test.Foo" table="FOO" >
        <id name="id" type="long">
            <column name="FOO_ID" precision="11" scale="0" />
            <generator class="assigned" />
        </id>

        <many-to-one name="bar" class="com.test.Bar" >
            <cache usage="read-only" />
            <column name="BAR_TY" not-null="true" />
            <column name="BAR_VAL" length="4" not-null="true" />
        </many-to-one>

    </class>
</hibernate-mapping>

(これは、私の実際の hbm.xml ファイルの非常に短縮/変更されたバージョンです。エラーがないことを願っています)

「foo」ではなく「bar」のみをキャッシュしていることに注意してください。ただし、このマッピングで単体テストを実行すると、次のエラーが発生します。

SEVERE: XML の解析エラー: XML InputStream(40) 要素タイプ「多対 1」のコンテンツは、「(meta*,(column|formula)*)」と一致する必要があります。

私が取り出したとき、それはうまく動作します.L2キャッシュはありません. 多対一の関係がキャッシングをサポートしていないということですか? もしそうなら、これを回避する方法についての提案はありますか?

参考までに、「バー」を直接(つまり、関連付けを介してではなく)読み取る別の単体テストがあり、正しく機能します.2回目に「バー」を取得すると、L2キャッシュから取得されるため、残りの構成は正しく行われました。申し訳ありませんが、まだ石器時代に働いているため、注釈などはありません.

4

2 に答える 2

0

XML の形式が正しくありません。<cache>内の不正なノード<many-to-one>です。hibernate-mapping-3.0.dtd
を参照してください。要素の宣言: many-to-one

<!ELEMENT many-to-one (meta*,(column|formula)*)>
    <!ATTLIST many-to-one name CDATA #REQUIRED>
    <!ATTLIST many-to-one access CDATA #IMPLIED>
    <!ATTLIST many-to-one class CDATA #IMPLIED>
    <!ATTLIST many-to-one entity-name CDATA #IMPLIED>
    <!ATTLIST many-to-one column CDATA #IMPLIED>
    <!ATTLIST many-to-one not-null (true|false) #IMPLIED>
    <!ATTLIST many-to-one unique (true|false) "false">
    <!ATTLIST many-to-one unique-key CDATA #IMPLIED>
    <!ATTLIST many-to-one index CDATA #IMPLIED>
    <!ATTLIST many-to-one cascade CDATA #IMPLIED>
    <!ATTLIST many-to-one outer-join (true|false|auto) #IMPLIED>
    <!ATTLIST many-to-one fetch (join|select) #IMPLIED>
    <!ATTLIST many-to-one update (true|false) "true">
    <!ATTLIST many-to-one insert (true|false) "true">
    <!ATTLIST many-to-one optimistic-lock (true|false) "true">  
    <!ATTLIST many-to-one foreign-key CDATA #IMPLIED>
    <!ATTLIST many-to-one property-ref CDATA #IMPLIED>
    <!ATTLIST many-to-one formula CDATA #IMPLIED>
    <!ATTLIST many-to-one lazy (false|proxy|no-proxy) #IMPLIED>
    <!ATTLIST many-to-one not-found (exception|ignore) "exception">
    <!ATTLIST many-to-one node CDATA #IMPLIED>
    <!ATTLIST many-to-one embed-xml (true|false) "true">  

キャッシュ要素はクラス レベルに配置できます。

<hibernate-mapping>
    <class name="com.test.Foo" table="FOO" >
        <cache usage="read-only" />
        <id name="id" type="long">

または、などsetのコレクションの場合。mapbag

于 2014-09-16T11:25:08.397 に答える
0

の定義をbar別の別の別の場所に移動.hbm.xmlして、 からのみ参照しようとしましたfooか?

于 2011-06-01T22:09:05.373 に答える