Объекты, на которые есть ссылки, по-прежнему загружаются, пока включен FetchType.LAZY - PullRequest
0 голосов
/ 24 января 2019
@Data
@EqualsAndHashCode(exclude = {"suburbs", "upCities"})
class City {

    @ManyToMany(mappedBy = "suburbs", fetch = FetchType.LAZY)
    @JsonBackReference
    private Set<City> uppers = new HashSet<>();

    @ManyToMany(cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
    }, fetch = FetchType.LAZY)
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @BatchSize(size = 5)
    @JsonManagedReference
    private Set<City> suburbs = new HashSet<>();

    @Override
    public int compareTo(City o) {
        return publicId.compareTo(o.getId());
    }
}

class CityService {
  public List<City> findAll() {
        return dao.findAll().stream().sorted().collect(Collectors.toList());
    }

Метод findAll по-прежнему загружает все ссылочные объекты (пригороды и верхушки), даже если я установил Lazy fetch.

В журнале гибернации есть запрос select suburbs, но нет запроса select uppers.

Понятия не имею, как это происходит.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 24 января 2019

Это потому, что у Hibernate нет другого способа узнать, назначать ли NULL или прокси для этой переменной. То, что вы видите, может быть прокси-объектами.

Используйте optional = false и попробуйте. Этот необязательный трюк не работает на каждом из Hibernate.

...