Проблема с циклом при сериализации объектов в JSON в Spring BootJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с циклом при сериализации объектов в JSON в Spring Boot

Сообщение Anonymous »

Я использую версию Spring Boot 3.2 с базой данных MySQL. У меня есть два объекта

Код: Выделить всё

@Getter
@Setter
@Entity
@Table(name = "shops")
public class Shop{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
@OneToMany(mappedBy = "shop", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List books;
}
и

Код: Выделить всё

@Getter
@Setter
@Entity
@Table(name = "books")
public class Book{

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

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id")
private Shop shop;
}

Итак, у меня возникла проблема с ошибками, когда я пытаюсь получить все магазины со всеми книгами. У меня есть объект «Магазин со всеми книгами», внутри каждой книги есть свой собственный объект «Магазин», со всей книгой и т. д. И это выглядит так:

Код: Выделить всё

[
{
"id": 4,
"address": "Street",
"books": [
{
"id": 3,
"description": "Book1",
"shop" : {
"id": 4,
"address": "Street"
"books": [
{
"id": 3,
"description": "Book1",
"shop" : { ...
}
]
}
]
}
]
Итак, проблема в том, что я хочу использовать один класс для сохранения магазинов/книг и получения данных из базы данных.
Тогда мне нужно, чтобы в этом магазине все книги были объектами со всеми данными, но книги имеют только идентификатор магазина.
Поэтому получение всех магазинов должно выглядеть так

Код: Выделить всё

[
{
"id": 4,
"address": "Street",
"books": [
{
"id": 3,
"description": "Book1",
"shop" : 4
}
]
}
]
и получение всех книг должно выглядеть так

Код: Выделить всё

[
{
"id": 3,
"description": "Book1",
"shop": 4
},
{
"id": 4,
"description": "Book2",
"shop": 5
},
{
"id": 5,
"description": "Book4",
"shop": 5
},
]
Как я уже сказал, я хочу использовать один и тот же класс для сохранения магазинов/книг и тот же класс для их получения.
Я столкнулся с парой проблем.
< ol>
[*]Я не хочу создавать дополнительные объекты ShopDTO/BookDTO для получения, потому что, если это будет 1 миллион книг, мне придется каждый раз создавать 1 миллион объектов при получении.
[*]Я не могу добавить еще одну переменную, например Long shopId; потому что это будет ошибка спящего режима.
Таблица [books] содержит имя физического столбца [shop_id], на которое ссылаются несколько имен логических столбцов: [shop_id], [shopId]
[*]Я могу' не изменится

Код: Выделить всё

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id")
private Shop shop;
включено

Код: Выделить всё

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id")
private Long shop;
или вообще удалите @ManyToOne.

Подробнее здесь: https://stackoverflow.com/questions/786 ... pring-boot
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»