У меня есть вопрос о создании собственного запроса с пользовательским ответом (пружинная проекция) с вложенным «пользовательским» подсписком, т. Е. Я пытаюсь сгенерировать JSON вывод с вложенными подсписками.
Дочерняя сущность:
@Entity
public class Child {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@NotNull
@Column(nullable = false)
private String firstName;
@NotNull
@Column(nullable = false)
private String secondName;
@Enumerated(EnumType.STRING)
private Gender gender;
private Date dateOfBirth;
private String phone;
@ManyToOne
@JoinColumn(name="child_id")
private List<Parent> parents = new ArrayList<Parent>();
//...
}
Родительским объектом является, например:
@Entity
public class Parent {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@NotNull
@Column(nullable = false)
private String firstName;
@NotNull
@Column(nullable = false)
private String secondName;
private Date dateOfRegistration;
@OneToMany(fetch = FetchType.LAZY)
private List<Child> child = new ArrayList<Child>();
//...
}
Интерфейс проекции:
public interface ChildProjectionInterface {
public int getParentId();
public Date getFirstName();
public List<ChildResponse> getChildData();
interface ChildResponse {
public int getChildID();
public String getFirstName();
}
}
Запрос (но, очевидно, не работает):
@Query(value = "SELECT p.id AS parentId, p.firstName AS firstName, c.id AS childData.childId, c.firstName AS childData.firstName FROM parent p LEFT JOIN child c ON p.child_id = c.child_id AND p.secondName = :secondName", nativeQuery = true)
List<ChildProjectionInterface> getListWithSubList(@Param(value ="secondName") String secondName);
Я читал, исследовал и пытался .. но ничего не работает (я видел https://medium.com/swlh/spring-data-jpa-projection-support-for-native-queries-a13cd88ec166, видел предложение "для json авто", но не для пружин jpa, et c. )