私は 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 は実行されません。
問題は、このバグまたは機能ですか? そして、どうすればそのような潜在的なものを避けることができますか.