繁体   English   中英

使用外键连接两个表 - Hibernate,SpringBoot

[英]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 显示借用表的详细信息时,我只得到它的idtakenDatebroughtDate我看不到userIdbookId

这是我在 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();
    }

我不明白为什么不显示外键及其值? 任何建议都受到高度赞赏。

  1. 您在 Borrow 实体中使用@JsonIgnore 将 object 序列化为 JSON 时,将忽略具有 JsonIgnore 的列。

  2. 您在借用实体中使用延迟加载(FetchType.LAZY) 如果不使用 JsonIgnore,则必须在服务中加载 Borrow 实体的所有其他实体(书籍和用户),或者必须使用 FetchType.EAGER。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM