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
Java JPA-在另一个表中使用的多对多主键_Java_Jpa_Relational Database_Entity_Persistence - Fatal编程技术网

Java JPA-在另一个表中使用的多对多主键

Java JPA-在另一个表中使用的多对多主键,java,jpa,relational-database,entity,persistence,Java,Jpa,Relational Database,Entity,Persistence,我希望能够在我的个人实体中拥有每本书的当前页面的书籍列表。(给定的藏书可供多人使用) 我有以下表格: BookCollection --------------- collection_id collection_name Book --------------- book_id book_name CollectionBooks --------------- cb_id collection_id book_id Person --------------- person_id

我希望能够在我的个人实体中拥有每本书的当前页面的书籍列表。(给定的藏书可供多人使用)

我有以下表格:

BookCollection
---------------
collection_id
collection_name


Book
---------------
book_id
book_name


CollectionBooks
---------------
cb_id
collection_id
book_id


Person
---------------
person_id
person_name


PersonBooks
---------------
pb_id
person_id
cb_id
current_page
已设置前4个表,并且关系正在运行。我不知道如何在PersonBooks表中使用JPA。我相信这就是我在数据库中确定一个人拥有的书籍以及他们在给定书籍中的页面所需的全部内容

以下是实体类

@Entity
public class BookCollection {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long collectionId;

    private String collectionName;

    @ManyToMany
    @JoinTable(name="CollectionBooks", 
               joinColumns=@JoinColumn(name="collection_id", referencedColumnName="collectionId"), 
               inverseJoinColumns=@JoinColumn(name="book_id", referencedColumnName="bookId"))
    private Set<Book> books;
}

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long bookId;

    private String bookName;
}

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long personId;

    private String personName;
}
@实体
公共类藏书{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有长集合ID;
私有字符串集合名;
@许多
@JoinTable(name=“CollectionBooks”,
joinColumns=@JoinColumn(name=“collection\u id”,referencedColumnName=“collectionId”),
inverseJoinColumns=@JoinColumn(name=“book\u id”,referencedColumnName=“bookId”))
私人书籍;
}
@实体
公共课堂用书{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长书号;
私有字符串书名;
}
@实体
公共阶层人士{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长人形;
私有字符串personName;
}

您尝试过什么?你的实体在哪里?为什么你在藏书中有一个cb_id?为什么你在个人笔记本上有一个cb_id,而不是一个book_id?您希望一个人拥有书籍,因此联接表应该包含一个person id和一个book id。谢谢您的回复。我在两个表中都添加了一个cb_id,因为在我的实际数据中,集合中的书可以具有与之关联的唯一属性。所以我需要集合和书籍的关系,这就是我需要基于一个人附加一个值的地方。所以你不能用太多。一个人有很多个人手册。那是一个单一的协会。藏书有很多藏书。那是另一个独角戏。个人书籍指的是收藏书籍。那是一个多人游戏。收藏书是指一本书。这是一个很重要的问题,我就是这么想的。我认为我最多可以拥有一组PersonBooks对象,其中包括金额以及CollectionBooks实体中的Book实体和Collection实体。