Можно ли выгрузить сущность с частично проинициализированным списком связанных сущностей (oneToMany)?
Приложение на Spring Boot. Имеются сущности с отношением oneToMany:
@Entity
public class House {
@Id
Integer id;
@OneToMany(mappedBy = "house")
List<Citizen> citizens;
}
@Entity
public class Citizen {
@Id
Integer id;
String name;
@ManyToOne
@JoinColumn(name = "house_id")
House house;
@OneToMany(mappedBy = "citizen")
List<Order> orders;
}
@Entity
public class Order {
@Id
Integer id;
@ManyToOne
@JoinColumn(name = "citizen_id")
Citizen citizen;
int price;
}
Некоторые аннотации опущены, не суть. Я хочу выгрузить список сущностей House из базы данных. Причём я хочу сделать так, чтобы у каждой сущности в списке citizens были бы проинициализированы жители, у которых есть определённое имя, а у этих жителей в свою очередь был бы проинициализирован список заказов.
Ну то есть, если представить полученный из базы данных список объектов House в виде JSON, то он должен выглядеть вот так:
[
{
id: 100000,
citizens: [
{не проинициализировано},
{не проинициализировано},
{id: 100168, name: "Petya", orders: [{price: 1012}, {price: 224}, {price: 209}]},
{не проинициализировано},
{не проинициализировано},
{не проинициализировано}
]
},
{
id: 100001,
citizens: [
{id: 100009, name: "Petya", orders: [{price: 13}]},
{не проинициализировано},
{id: 100035, name: "Petya", orders: [{price: 117}, {price: 35}]},
{не проинициализировано}
]
}
]
Для доступа к базе данных (PostgreSQL) я использую свою реализацию JpaRepository:
@Transactional(readOnly = true)
public interface HouseDao extends JpaRepository<House, Integer> {
}
Как мне теперь следует составить запрос, чтобы добиться желаемого результата? Будет ли работать вот такая конструкция так, как я ожидаю:
@Query("SELECT h FROM House h JOIN h.citizens AS citizen JOIN citizen.orders WHERE cizizen.name=:name")
List<House> getAllWithCitizensWithName(String name);
Если нет, то как я могу составить нужный мне запрос?