私は休止状態に慣れていないので、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キャッシュから取得されるため、残りの構成は正しく行われました。申し訳ありませんが、まだ石器時代に働いているため、注釈などはありません.