У меня есть три объекта, как показано ниже. Я использую геттеры и сеттеры на основе Lombok:
@Getter
@Setter
@EqualsAndHashCode(callSuper = true, exclude = { "cClasses"})
class AClass {
// some properties
@OneToMany(mappedBy = "aClass", orphanRemoval = true)
private List<CClass> cClasses;
}
class BClass {
// some properties
}
@Getter
@Setter
@EqualsAndHashCode(callSuper = true, exclude = { "aClass", "bClass"})
class CClass {
// other properties
// this is bidirectional
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "A_ID", referencedColumnName = "A_ID")
private AClass aClass;
// this is unidirectional
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "B_ID", referencedColumnName = "B_ID")
private BClass bClass;
}
И класс репозитория JPA выглядит следующим образом:
@Repository
public interface CClassRepository extends JpaRepository<CClass, Long> {
List<CClass> findByBClassBidIn(List<Long> ids);
}
Вывод получается ожидаемым, но производительность очень низкая , Я вижу в журналах, что запросы на выборку для всех AClass также выполняются. Как можно избежать вызовов свойства @ManyToOne aClass.
Я пытался использовать @JsonManagedReference и @JsonIgnore для свойства aClass класса CClass. Но все же он извлекает эти записи, когда я вызываю метод репозитория. Подскажите пожалуйста, как решить эту проблему.