Spring JPA проекция с подсписком - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть вопрос о создании собственного запроса с пользовательским ответом (пружинная проекция) с вложенным «пользовательским» подсписком, т. Е. Я пытаюсь сгенерировать 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. )

1 Ответ

0 голосов
/ 07 февраля 2020

Вы пробовали оператор извлечения jpa?

@Query("select p from parent p left join fetch p.child c where p.secondName = :secondName")
...