Весенние данные JPA. Пагинация для дочерних объектов

Я использую Spring Data JPA с загрузочной версией Spring 1.3.6.RELEASE с базой данных в памяти.

Мне интересно, как разбить дочерние объекты на родительские объекты. Установка fetch на LAZY не является для меня решением.

Вот пример использования:

  1. Родитель имеет однонаправленное отношение oneToMany с дочерней сущностью.
  2. Количество детей на одного родителя может достигать 100 000 (ленивый не решение)
  3. Я не хочу, чтобы все дети делали нумерацию страниц (по причине использования процессора и памяти)

Вот пример кода:

@Entity
public class Parent{
    @Id
    private Integer id;

    @OneToMany
    private List<Child> childs;
}

@Entity
public class Child {
    @Id
    private Integer id;
}

public interface ParentRepository extends JpaRepository<Parent, Integer>{}
public interface ChildRepository extends JpaRepository<Child, Integer>{}

Я попытался это в родительском хранилище безуспешно:

Page<Child> findById(int id, Pageable pageable);

Это возвращает родительский объект, а не дочерний объект.

Есть идеи как это сделать?

1 ответ

Решение

Вот пример кода, который может извлекать дочерние объекты, зная родителя. Обратите внимание, что этот запрос вернет постраничный результат Child.

 /**
  * Find Child entities knowing the Parent.
  */
  @Query("select child from Parent p inner join p.childs child where p = :parent")
  public Page<Child> findBy(@Param("parent") Parent parent, Pageable pageable);

И вы можете использовать это так:

Page<Child> findBy = repo.findBy(parent, new PageRequest(page, size));

Предполагая, что родитель называется "Родитель", вы также можете сделать что-то подобное:

repo.findAllByParent(parent, pageable);

Другие вопросы по тегам