Spring FetchType.Lazy Нужна поваренная книга - PullRequest
0 голосов
/ 21 сентября 2019

Я некоторое время работаю над приложением, основанным на Spring Boot, Hibernate, MySql и JavaFX - без Web - которое помогает владельцу продукта администрировать требования и тому подобное.Когда приложение запускается, я загружаю все сущности продукта, чтобы владелец продукта мог выбрать, над каким продуктом он хочет работать.

Продукт двунаправленно связан с требованиями и определенными ролями, планом тестирования. Эти объекты связаны с рисками, сотрудниками, тестовыми примерами и каким-то образом почти все остальные 40 классов объектов каким-то образом вплетены в эту сеть классов.Поскольку я не могу сделать выборку загруженных сущностей, связанных с продуктом, чтобы загружать их, вся база данных загружается, когда я запускаю приложение для создания выбора продукта.

В прошлом у меня были некоторые проблемы с отложенной загрузкой и транзакциями, такими как LazyLoadingExceptions, которые я исправил с помощью исключения, установив свойства, но теперь отложенная загрузка больше не работает.Я прочитал несколько статей в Интернете и разместил здесь сообщения, но я не могу помешать приложению загрузить все другие объекты.
Поэтому мне нужно кое-что, что описывает транзакцию, за исключением отложенной загрузки для таких макетов, как я, включая ВСЕ, чтонеобходимо:

  • Что должно быть в application.properties?spring.jpa.properties.hibernate.enable_lazy_load_no_trans = true или false?
    spring.jpa.open-in-view = true или false?
    любое другое свойство?
  • Где аннотация @Transactional?Это с классами Service или Repository?Является ли
@Service  
@Transactional  
public class XXXService {..}  

корректным или @Transactional должен присутствовать при каждом публичном методе службы?

  • Какая правильная аннотация двунаправленного ленивого отношения ManyToOne - OneToMany?
    На родительской стороне: @ManyToOne (fetch = FetchType.LAZY) @JoinColumn (name = "parent_id")?
    В списке детей: @OneToMany (mappedBy =" parent ", fetch = FetchType.LAZY, cascade = CascadeType.ALL)

  • Как работает ленивый однонаправленный ManyToOneаннотации похожи?

  • Как выглядит ленивая двунаправленная аннотация OneToOne?

  • Как выглядит ленивая однонаправленная аннотация OneToOne?

  • Нужно ли мне @EnableTransactionManagement, и если да, то где?

  • Все, что я пропустил, чего у меня нет на радаре

Я понимаю, что ленивая загрузка - это своего рода "рекомендация", но как я могуповлиять на это решение?Я предполагаю, что нет никакого рандомизатора, принимающего решение; -)

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

Я предполагаю, что в Github должны быть какие-то статьи или даже полные примеры - но я не смог их найти.

Я также могуопубликуйте мои занятия, если это поможет выявить проблему, но если вы укажете мне на статью / код, это может быть проще для вас?!

...