#java #jpa #lazy-loading #eager-loading
#java #jpa #отложенная загрузка #нетерпеливая загрузка
Вопрос:
У меня есть 2 класса
Student.java
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int student_id;
private String student_name;
@OneToMany(mappedBy ="student", cascade = CascadeType.ALL,fetch=FetchType.LAZY )
private List<Book> books;
//the getters and setters
}
Book.java
public class Book
{ @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int book_id;
private String book_name;
@ManyToOne(fetch=FetchType.LAZY)
private Student student;
//the getters and setters
}
Я знаю, что разница между быстрой загрузкой и отложенной загрузкой заключается в том, что быстрая загрузка помогает вам загружать все необходимые объекты одновременно, но отложенная загрузка загружает их при необходимости. Итак, для моего класса Student, и поскольку я использую ОТЛОЖЕННУЮ загрузку, он загружает student_id, student_name, но не загружает список книг, пока я не вызову методы getBooks() . Это ясно для родительской сущности.
Но для дочерней сущности это немного сбивает с толку. В чем разница между использованием нетерпеливой загрузки и отложенной загрузки внутри книги классов (в отношениях @ManyToOne)
Комментарии:
1. Ваш вопрос неясен. В объекте Book это будет действовать так же, объект student будет загружен с задержкой.
2. итак, почему большинство людей используют lazy для родительского класса и eager для дочернего?
3. Вы находитесь в родительском классе, поскольку у него есть список. Это должно загружать много данных из базы данных. Они, в свою очередь, могут иметь отношения с другими классами, заставляя его загружать все, что не нужно. Где, как и в дочернем классе, который в вашем случае является a
@ManyToOne
, является всего лишь одним объектом. Вот почему тип выборки по умолчанию@ManyToOne
— нетерпеливый.