1

私は ehcache を使用し、3.6.7 Final を休止状態にします。これは、キャッシュの問題を明らかにする疑似コード サンプルです。

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class A{    

    long id;    

    @OneToMany(mappedBy = "aId", targetEntity = B.class, fetch = FetchType.LAZY)
    @Fetch(value = FetchMode.JOIN)
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    protected Set<B> fieldB;
}    


@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class B { 

    long id;

    long bId; 
}

1) 初めてエンティティ A を休止状態からロードすると、フィールド B が読み取られません。これで問題ありません。FetchType.LAZY が設定されているためです。

2) エンティティ AI を 2 回目にロードすると、エンティティ A JOIN エンティティ B を取得する SQL クエリが表示されます。

3) @Fetch(value = FetchMode.JOIN) を削除すると、ポイント 2 は実行されません。

問題は、このバグまたは機能ですか? そして、どうすればそのような潜在的なものを避けることができますか.

4

1 に答える 1

1

2 つの競合するフェッチがあります。列にフェッチを指定したくないことは間違いありません。@Fetch アノテーションは、予測できない動作を提供するためです。

于 2012-06-15T15:56:50.417 に答える