Как прервать циклическую связь при запросе 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": [
и так дальше до бесконечности.
Вопрос. Как прервать эту цикличность?
