Hibernate Кэш второго уровня не работает для ассоциаций OneToOne - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь включить кэш второго уровня Hibernate, но не могу избежать нескольких запросов на отношения OneToOne.

Мои модели:

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Business {

    @OneToOne(mappedBy = "business", cascade = {CascadeType.REMOVE}, fetch = FetchType.EAGER)
    private Address address;
}

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Address {

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "business_id", unique = true, nullable = false, foreignKey = @ForeignKey(name = "fk_business_id"))
    private Business business;
}

Когда я запускаю session.get(Business.class, id) с Business с идентификатором id в кеше, запрос на загрузку Business не выдается, но это относится к Address.

Я понимаю, что Address является владельцем отношения и что в записи кэша Business Address.id информации нет, но разве нельзя было бы решить эту проблему, применяя тот же механизм, что и отношения * ToMany, создавая новую область кэша для каждого поля? Если предположить, что Business 1 связан с Address 2, в моем кеше после первой загрузки будут следующие регионы и записи:

Business
  Business#1         -> [business model]
Business.address
  Business.address#1 -> [2]
Address
  Address#2          -> [address model]

Я попытался заставить его работать, пометив Address.business с помощью @NaturalId и Address класс с @NaturalIdCache. Регион кэша создан и заполнен, но session.get(Business.class, id) не использует его.

Моя модель Business имеет еще много связей OneToOne, внешний ключ которых находится на другой стороне (не в Business), и мы должны перечислить несколько в то же время сервер базы данных должен обрабатывать десятки запросов на HTTP-запрос.

Я прочитал Руководство пользователя Hibernate, объяснение Влада Михалча о 2L C и его обезвоженный формат в памяти, объяснение Баэльдуна и несколько других ответов StackOverflow и не могут найти способ решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...