(Ответ в значительной степени переписан после комментариев ниже)
JPA не имеет встроенной поддержки иерархических запросов.Основной опцией является собственный запрос.
Например, с этим классом сущностей:
@Entity
public class MyTable {
@Id
@GeneratedValue
private int id;
private int uniqueId;
@ManyToOne
private MyTable reference;
// ... getters and setters ...
}
Ниже приведен пример собственного иерархического SQL-запроса (фактически на всякий случай с MySQL):
Query query = entityManager.createNativeQuery(
"select @ref\\:=id as id, unique_id, reference_id\r\n" +
"from my_table\r\n" +
"join (select @ref\\:=?)tmp\r\n" +
"where reference_id=@ref",
MyTable.class);
query.setParameter(1, 1);
query.getResultList();
Это была успешная цепочка ссылок.
(Другие альтернативы)
Вероятно, не так уж много других вариантовкоторый может сделать это как один запрос.Если масштабируемость не так важна, добавление обратной ссылки будет простым способом навигации по модели:
@OneToMany(mappedBy = "reference")
private Set<MyTable> backReferences;
В таком случае рекурсивно ориентироваться будет просто.Очевидно, что по умолчанию это отношение к отложенной загрузке, поэтому добавление будет незначительным, пока не будет использовано.