我使用 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<Book> 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" : { ...
}
]
}
]
}
]
所以问题是我想使用一个类来保存商店/书籍并从数据库获取。 然后我需要该商店将所有书籍作为具有所有数据的对象,但书籍只有 shopId。 所以获取所有商店应该是这样的
[
{
"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
},
]
正如我所说,我想使用相同的类来保存商店/书籍,并使用相同的类来获取。 我面临几个问题。
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id")
private Shop shop;
开
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id")
private Long shop;
或完全删除@ManyToOne。
@Entity
@Table(name = "shops")
public class Shop {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
}
@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;
}
SELECT s.id, s.address, b.id AS bookId
FROM shops s
LEFT JOIN books b ON s.id = b.shop_id;