Код: Выделить всё
@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;
Подробнее здесь: https://stackoverflow.com/questions/786 ... pring-boot