Подтвердить что ты не робот

Разница между FetchMode и FetchType

В чем разница в определении lazy = "true" и использовании fetch = "select" or "join"? какой из них предпочтительнее другого?

С уважением Джаендра

4b9b3361

Ответ 1

Скажем, у нас есть такие сущности:

@Entity
@Table
public class Parent {
    @Id
    private Long id;

    @OneToMany(mappedBy="parent", fetch = FetchType.EAGER)
    @Fetch(FetchMode.JOIN)
    private List<Child> child;    
    //getter setters
}


@Entity
@Table
public class Child {    
    @Id
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    private Parent parent;

    //getter setter
}

В приведенном выше примере при получении объекта Parent, спящий режим будет автоматически загружать все child объекты с помощью объединения. С другой стороны, когда вы получаете child, объект Parent не будет выбран, если вы не назовете его экспликацией в вашем коде child.getParent().

FetchType (Lazy/Eager) указывает, хотим ли мы, чтобы объект загружался с нетерпением или ленивым при вызове кода.

FetchMode (Select/Join) указывает, хотим ли мы, чтобы наша правота была загружена с дополнительным выбором или в одном запросе с объединением или подзапросом.

Ответ 2

FetchMode. Он определяет how спящий режим (с использованием какой стратегии, например, Join, SubQuery и т.д.) будет извлекать данные из базы данных.

FetchType. Он определяет whether. Спящий режим будет извлекать данные или нет.

ПРИМЕЧАНИЕ: FetchMode применимо только при FetchType = EAGER при аннотации.