[英]Joining two tables with foreign keys - Hibernate, SpringBoot
我有一个要连接的User
表和Book
表。
用户可以租多本书,一本书可以从多个用户租借。
这是many-to-many
关系。 如果我是对的?
所以我创建了第三个具有外键( bookId, userId
)的表Borrow
。
用户.java
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue
@Column(name = "user_id")
private Integer id;
private String name;
private String surname;
private String username;
private String email;
private String password;
@OneToMany(mappedBy = "user", cascade = CascadeType.PERSIST)
private List<Borrow> borrow;
//getters and setters
Book.java
@Entity
@Table(name = "Books")
public class Book {
@Id
@GeneratedValue
@Column(name = "book_id")
private Integer id;
private String title;
private String ISBN;
private String author;
private String issuer;
private Integer dateOfIssue;
private Boolean IsRented;
@OneToMany(mappedBy = "book", cascade = CascadeType.PERSIST)
private List<Borrow> borrow;
//getters and setters
借.java
@Entity
@Table(name = "Borrows")
public class Borrow {
@Id
@GeneratedValue
private Integer id;
private Date takenDate;
private Date broughtDate;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="bookId")
private Book book;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="userId")
private User user;
当我尝试使用 Postman 显示借用表的详细信息时,我只得到它的id
、 takenDate
、 broughtDate
我看不到userId
或bookId
。
这是我在 Postman 上运行 GET 方法后返回的 JSON
[
{
"id": 1,
"takenDate": "2020-08-04T00:36:07.000+00:00",
"broughtDate": "2020-08-02T00:36:07.000+00:00"
},
{
"id": 2,
"takenDate": "2020-08-11T00:36:07.000+00:00",
"broughtDate": "2020-07-05T00:36:07.000+00:00"
},
{
"id": 3,
"takenDate": "2020-08-21T00:38:00.000+00:00",
"broughtDate": "2020-08-12T00:38:00.000+00:00"
}
]
获取所有项目的代码:
@GetMapping("/items")
public List<Borrow> getAllItems(){
return service.getAllItems();
}
我不明白为什么不显示外键及其值? 任何建议都受到高度赞赏。
您在 Borrow 实体中使用@JsonIgnore 。 将 object 序列化为 JSON 时,将忽略具有 JsonIgnore 的列。
您在借用实体中使用延迟加载(FetchType.LAZY) 。 如果不使用 JsonIgnore,则必须在服务中加载 Borrow 实体的所有其他实体(书籍和用户),或者必须使用 FetchType.EAGER。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.