Как прервать циклическую связь при запросе hql используя JPA?

схема таблиц

Есть две таблицы, их видно на диаграмме.

Так же есть описание этих сущностей в стиле JPA:

@Entity
public class Gift {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "title")
    private String title;

    // ... 

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},
            orphanRemoval = true,
            fetch = FetchType.LAZY,
            mappedBy = "gift")
    private List<Image> images;
}

и таблица image :

@Entity
public class Image {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "gift_id")
    private Gift gift;
    
    // ...

}

При выполнении следующего запроса:

@Override
public List<Gift> getByFilter(FilterSearch filter) {
    String sql = """
            FROM Gift WHERE id = 2
            """;
    return entityManager.createQuery(sql, Gift.class).getResultList();
}

Получается циклическая зависимость, если можно так это назвать: Я получаю список gift, в котором image, в котором тот же самый gift и имеет те же самые image, которые в свою очередь имеют теже самые gift's и так до бесконечности.

[
    {
        "id": 2,
        "title": "title for gift",
        "description": "some simple description for gift",
        "shortDescription": "short description",
        "category": {
            "id": 1,
            "name": "first category",
            "parent": null
        },
        "costPrice": 2.0,
        "price": 3.4,
        "dateAdded": "2023-06-26T15:41:55.958+00:00",
        "isEnabled": false,
        "images": [
            {
                "id": 6,
                "gift": {
                    "id": 2,
                    "title": "title for gift",
                    "description": "some simple description for gift",
                    "shortDescription": "short description",
                    "category": {
                        "id": 1,
                        "name": "first category",
                        "parent": null
                    },
                    "costPrice": 2.0,
                    "price": 3.4,
                    "dateAdded": "2023-06-26T15:41:55.958+00:00",
                    "isEnabled": false,
                    "images": [
                        {
                            "id": 6,
                            "gift": {
                                "id": 2,
                                "title": "title for gift",
                                "description": "some simple description for gift",
                                "shortDescription": "short description",
                                "category": {
                                    "id": 1,
                                    "name": "first category",
                                    "parent": null
                                },
                                "costPrice": 2.0,
                                "price": 3.4,
                                "dateAdded": "2023-06-26T15:41:55.958+00:00",
                                "isEnabled": false,
                                "images": [
                

и так дальше до бесконечности.

Вопрос. Как прервать эту цикличность?


Ответы (0 шт):