что такое FieldType.nested в спящем режиме - PullRequest
0 голосов
/ 04 октября 2018

Ниже приведен код, который я пытаюсь понять.

`` `

class Member {

   @Id
   private Long id;

   @OneToOne(optional = false,
            cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE})
    @MapsId
    @Field(type = FieldType.Nested)
    private Reference reference;
}

` ``

По сути, я начал анализировать этот класс, потому что у нас естьn + 1 проблема с Участником.Он возник из отношения @ManyToOne, поэтому я добавил @Batchsize поверх Member и частично решил свою проблему.Это частично решено, потому что другое отношение @OneToOne все еще вызывает n запросов.Я думал о том, чтобы преобразовать это отношение в Lazy и аннотировать с помощью BatchSize, но я не мог понять его влияние, учитывая две вышеупомянутые аннотации - MapsId и @Field(type = FieldType.Nested)

Может кто-нибудь помочь мне понять эти аннотациии возможное влияние, если я сделаю это отношение Lazy

1 Ответ

0 голосов
/ 04 октября 2018

Я попытаюсь объяснить все три

1.FetchType Lazy and Eager

  • Если выбран тип извлечения Eager.При вызове «Выбрать * из члена» вы увидите, что hibernate запускает другой запрос. «Выберите r из ссылки, где id =?»

  • Если тип выборки - Ленивый, то второй запрос не будетсрабатывает, пока вы не сделаете что-то подобное

    Member m = getMember(id);
    
    m.getReference(); // Hibernate will fire another query. 
    
  • В большинстве случаев я использую LAZY

2.@ Batchsize

  • В случае вызова get BatchSize ведет себя так, например:
  • позволяет предположить, что вы выбрали 25 экземпляров Member, и у каждого Member есть ссылка на Reference.И класс Reference в сопоставлении с lazy="true".

  • Если вы выполните итерацию по mem.getReference(), Hibernate по умолчанию выполнит 25 операторов SELECT для извлечения проксированной ссылки.

  • Вы можете настроить это поведение, указав размер пакета в отображении Reference, скажем, batchSize 10
  • Теперь Hibernate будет выполнять только три запроса: шаблон 10, 10, 5.

3.FieldType.Nested

  • Этот тип данных следует использовать, когда необходимо индексировать массивы объектов и поддерживать независимость каждого объекта.

  • Это означает, что значения для всех объектов не будут смешиваться вместе, как вы видели выше.

  • Внутри каждого объекта в массиве индексируется как отдельный скрытый документ.

    Подробнее здесь

...