Предотвращение бесконечного цикла извлечения данных с Hibernate - PullRequest
2 голосов
/ 15 июля 2010

Мне было интересно: представьте себе сценарий, в котором, например,

// POJO

public class User {

   private String userName;
   private String name;
   private String surname;
   private List<Blog> blogList;

   //All getters and setters are found here and assume they're generated.
}

public class Blog {
    private String title;
    private String content;
    private User author;
    private Date datePublished;
    private Date dateLastModified;

    //All getters and setters have been generated (by Eclipse or NetBeans)
}

Представьте, что эти объекты были правильно сопоставлены с соответствующими файлами конфигурации Hibernate.

Мой вопрос:

Как мне найти своего пользователя со списком всех пользовательских блогов на уровне кода?(т.е. не разрешать hibernate заполнять blogList автоматически для меня. Я хочу добавить подкачку (то есть из списка 5, получить список 20), а также, если вы тщательно обдумаете, это может быть бесконечный цикл, поскольку у блога есть User сущность, которая имеет List<Blog> сущность.

Как мне предотвратить это?

PS Просто из любопытства, как бы я позволил Hibernate заполнить мою blogList на стороне конфигурации?

Заранее спасибо.

1 Ответ

4 голосов
/ 15 июля 2010
  • Hibernate обнаруживает такие циклы и не позволяет им произойти
  • Вы можете пометить вашу коллекцию с помощью fetch type = lazy (fetchType=FetchType.LAZY), чтобы элементы коллекции не выбирались при владении объектом
  • Вы можете использовать Query с setFirstResult(..) и setMaxResults(..) для достижения подкачки.(и тогда избавьтесь от коллекции)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...