У меня есть примечание о сущности, к которому добавлено поле «код» в словаре.Я хотел бы получить все заметки, но есть проблема с n + 1.Когда я выбираю заметки в спящем режиме, а также извлекаю данные из таблицы Dicionary, один дополнительный запрос на одну заметку (если словарь отсутствует в кеше первого уровня).
Я включил кэш 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();
}
}
Надеюсь, это достаточно ясно.Спасибо.