Как получить родительский объект по дочернему полю? Я использую спецификацию
У меня есть репозиторий
ParentRepository extends JpaRepository<Parent, Long>, JpaSpecificationExecutor<Parent>{
}
И два класса:
class Parent{
@Id
long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = ID_CHILD)
Child child;
}
class Child{
@ID
long id;
@OneToOne(mappedBy = "child", cascade = CascadeType.ALL)
Parent parent;
Date date;
}
Мне нужно получить родителя по полю дочернего элемента. Нужен родитель, у которого есть ребенок с датой между двумя датами.
Я пытался написать класс ParentSpecification, но не понимаю, как это сделать.
public class ParentSpecification {
private ParenSpecification() {
}
public static Specification<Parent> byChildName(Date one, Date two){
return (root, query, criteriaBuilder) -> {
??????????
return criteriaBuilder....
};
}
}
Следующий код может вам помочь. Здесь найдите родителя по дате ребенка. Вы можете изменить в соответствии с вашими потребностями.
public class ParentSpecification {
public static Specification<Parent> byChildDate(Date one, Date two){
return (root, query, criteriaBuilder) ->
criteriaBuilder.between(root.get("child").get("date"), one, two);
}
}
Как sql: выберите * from parent as c, где c.ID_CHILD in (выберите child.id из дочернего, где child.date между 2010 и 2018)