Dictionary のフィールド 'code' で結合されたエンティティ Note があります。すべてのメモを取得したいのですが、n+1 の問題があります。メモを取得しているときに、休止状態でテーブル Dicionary からもデータを取得し、1 つのメモごとに 1 つの追加クエリを実行します (辞書がまだ第 1 レベルのキャッシュにない場合)。
ID で辞書を取得している場合にのみ機能する第 2 レベルのキャッシュ (ehcache を使用しています) を有効にしました。クエリ キャッシュを使用したくありません。たぶん、二次キャッシュから一次キャッシュに辞書をロードする必要がありますか?
@Entity
public class Note {
@Id
private Long id;
@ManyToOne
@JoinColumn(referencedColumnName = "code")
private Dictionary noteType;
}
@Entity
@NaturalIdCache
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Dictionary {
@Id
private Long id;
@NaturalId
@Column(unique = true, nullable = false, updatable = false, insertable = false)
private String code;
}
@org.springframework.stereotype.Repository
public interface NoteRepository extends Repository<Note, Long> {
List<Note> findAll();
}
@RestController
@RequiredArgsConstructor
class NoteController {
private final NoteRepository noteRepository;
@GetMapping("\all")
public List<Note> getAll() {
return noteRepository.findAll();
}
}
これが十分に明確であることを願っています。ありがとうございました。