SELECT *
FROM C c
LEFT JOIN c.b b
LEFT JOIN b.a
WHERE c.date < a.someDate;
Assuming you have a mapping like
@Entity public class A {
@Id Long id;
@TemporalType(DATE) Date someDate;
}
@Entity public class B {
@Id Long id;
@ManyToOne A a;
}
@Entity public class C {
@Id Long id;
@ManyToOne B b;
@TemporalType(DATE) Date date;
}