Это не имеет никакого смысла, потому что весь граф сущностей должен быть выбран. Представьте, что у родителя p
есть дети c1
, c2
и c3
, и в ваш метод передаются только идентификаторы c1
и c2
. Если вы выбираете сущность Parent
только с c1
и c2
, то что произойдет, если вы сделаете что-то вроде этого:
p = parentRepo.getParentByIdAndChildIds(1, Arrays.asList(1,2));
p.getChildren().add(c3);
parentRepo.save(p); // what happens?
Создание нового потомка не имеет смысла, потому что уже есть существует один в базе данных. С другой стороны, поведение jpa по умолчанию удаляет отношения между p
и c3
при сохранении без изменения:
p = parentRepo.getParentByIdAndChildIds(1, Arrays.asList(1,2));
parentRepo.save(p); // is the relationship between p and c3 destroyed
Рассмотрите возможность создания двунаправленных отношений (также с Child
до Parent
) и выбор только Child
сущностей (из ChildRepository
):
interface ChildRepository extends JpaRepository<Child, Integer> {
@Query("SELECT c FROM Child c WHERE c.parent.id = :parentId and c.id IN(:childIds)")
List<Child> getParentByIdAndChildIds(int parentId, List<Integer> childIds)
}
Таким образом, вы получаете только Child
сущностей, которые вы хотите, но также Parent
достижимо из любых Child
( children.get(0).getParent()
).