我有一个实体注释,它由字典中的字段“代码”连接。我想取所有笔记,但有 n+1 个问题。当我获取笔记时,休眠也从表 Dicionary 获取数据,每个笔记有一个额外的查询(如果字典不在一级缓存中)。
我启用了 2 级缓存(我使用的是 ehcache),它仅在我通过 ID 获取字典时才起作用,也许有一种方法如何使用自然 id ?我不想使用查询缓存。也许我应该将字典从二级缓存加载到一级缓存?
@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();
}
}
我希望这足够清楚。谢谢你。