JPA中的M:N关系(包装给定表)
我有一个m:n关系book-borrow-user,借阅是联接表 表格如下所示(不能更改):JPA中的M:N关系(包装给定表),jpa,many-to-one,Jpa,Many To One,我有一个m:n关系book-borrow-user,借阅是联接表 表格如下所示(不能更改): 一方面,它们也被jdbc应用程序使用 另一方面,我想通过jpa使用它们 图书(图书id)-借阅(图书id,已用id)-用户(用户id) 使用的jpa注释: 用户: @OneToMany(targetEntity=BorrowEntity.class,mappedBy=“用户”) @JoinColumn(name=“USER\u ID”,referencedColumnName=“USER\u ID”
- 一方面,它们也被jdbc应用程序使用
- 另一方面,我想通过jpa使用它们
使用的jpa注释:
用户:
@OneToMany(targetEntity=BorrowEntity.class,mappedBy=“用户”)
@JoinColumn(name=“USER\u ID”,referencedColumnName=“USER\u ID”)
私人借款;
书:
@OneToMany(targetEntity=BorrowEntity.class,mappedBy=“book”)
@JoinColumn(name=“BOOK\u ID”,referencedColumnName=“BOOK\u ID”)
私人借款;
我的问题是,通过上面的设置,它会向借用表添加一些额外的(不需要的)字段:
“用户\用户\ ID”和“图书\图书\ ID”
我如何配置jpa注释以保持只需借用:用户id、图书id,这足够多到一个?
请看这张图片,它告诉我们更多:
首先,由于借阅表是一个纯联接表,因此根本不需要映射它。您所需要的只是将此借用表用作JoinTable的多个关联
@ManyToMany
@JoinTable(name = "borrow",
joinColumns = @JoinColumn(name = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "BOOK_ID"))
private List<Book> borrowedBooks;
...
@ManyToMany(mappedBy = "borrowedBooks")
private List<User> borrowingUsers;
targetEntity也是多余的,因为它是一个列表
:JPA可以从列表的泛型类型推断目标实体
@ManyToMany
@JoinTable(name = "borrow",
joinColumns = @JoinColumn(name = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "BOOK_ID"))
private List<Book> borrowedBooks;
...
@ManyToMany(mappedBy = "borrowedBooks")
private List<User> borrowingUsers;
@OneToMany(targetEntity=BorrowEntity.class, mappedBy="user")
@JoinColumn(name="USER_ID", referencedColumnName="USER_ID")
private List<BorrowEntity>borrowings;
@OneToMany(mappedBy="user")
private List<BorrowEntity>borrowings;