Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA中的M:N关系(包装给定表)_Jpa_Many To One - Fatal编程技术网

JPA中的M:N关系(包装给定表)

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”

我有一个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”)
私人借款;
书:
@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;