Java 作者与出版物[书籍、杂志、漫画等]之间的多对多关系

Java 作者与出版物[书籍、杂志、漫画等]之间的多对多关系,java,mysql,spring-boot,spring-data-jpa,Java,Mysql,Spring Boot,Spring Data Jpa,创建RESTful API来搜索和管理杂志、漫画、书籍及其作者。 每个作者可以有多个出版物。 每个出版物可以有多个作者。 下面是所描述的域模型: 域模型: Author: name Publications: Book: title year genre Comics: title year hero[name of the hero featured in comi

创建RESTful API来搜索和管理杂志、漫画、书籍及其作者。 每个作者可以有多个出版物。 每个出版物可以有多个作者。 下面是所描述的域模型:

域模型:

Author:
     name


Publications:

    Book:
        title
        year
        genre

    Comics:
        title
        year
        hero[name of the hero featured in comics]

    Magazine:
        title
        year
        type
1作者可以有多种出版物[书籍、漫画、杂志]。一个出版物可以有多个作者

我不知道如何在模型对象之间创建多对多关系

如果只是关于作者和书,我可以做。稍后我将在代码中显示

但出版物可以是任何东西[书籍、漫画、杂志]。 因此,作者和书籍之间的多对多代码是:

类作者:

@Entity
@Table(name = "author")
public class Author implements Serializable{

  private static final long serialVersionUID = 9045098179799205444L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  Long id;

  @Column(name = "name")
  String name;

  //author_book is the 3rd table used for relationship

  @ManyToMany(cascade = CascadeType.ALL, mappedBy = "authors")
  @JoinTable(name = "author_book",
        joinColumns = { @JoinColumn(name = "author_id") },
        inverseJoinColumns = { @JoinColumn(name = "book_id") })



  private Set<Book> books;
  //getters and setters....
@Entity
@Table(name = "book")
public class Book implements Serializable{

private static final long serialVersionUID = -5241781253380015253L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;

@Column(name = "title")
String title;

@Column(name = "year")
int year;

@Enumerated(EnumType.STRING)
BookGenre bookGenre;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="author_book",
  joinColumns = @JoinColumn(name = "author_id", referencedColumnName = "id"),
  inverseJoinColumns = @JoinColumn(name = "book_id", referencedColumnName = "id"))

private Set<Author> authors;
@实体
@表(name=“author”)
公共类Author实现了可序列化{
私有静态最终长serialVersionUID=904509817979920544L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
长id;
@列(name=“name”)
字符串名;
//author_book是用于关系的第三个表
@ManyToMany(cascade=CascadeType.ALL,mappedBy=“authors”)
@JoinTable(name=“author\u book”,
joinColumns={@JoinColumn(name=“author_id”)},
inverseJoinColumns={@JoinColumn(name=“book_id”)})
私人书籍;
//能手和二传手。。。。
课程手册:

@Entity
@Table(name = "author")
public class Author implements Serializable{

  private static final long serialVersionUID = 9045098179799205444L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  Long id;

  @Column(name = "name")
  String name;

  //author_book is the 3rd table used for relationship

  @ManyToMany(cascade = CascadeType.ALL, mappedBy = "authors")
  @JoinTable(name = "author_book",
        joinColumns = { @JoinColumn(name = "author_id") },
        inverseJoinColumns = { @JoinColumn(name = "book_id") })



  private Set<Book> books;
  //getters and setters....
@Entity
@Table(name = "book")
public class Book implements Serializable{

private static final long serialVersionUID = -5241781253380015253L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;

@Column(name = "title")
String title;

@Column(name = "year")
int year;

@Enumerated(EnumType.STRING)
BookGenre bookGenre;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="author_book",
  joinColumns = @JoinColumn(name = "author_id", referencedColumnName = "id"),
  inverseJoinColumns = @JoinColumn(name = "book_id", referencedColumnName = "id"))

private Set<Author> authors;
@实体
@表(name=“book”)
公共类图书实现了可序列化{
私有静态最终长serialVersionUID=-5241781253380015253L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
长id;
@列(name=“title”)
字符串标题;
@列(name=“年”)
国际年;
@枚举(EnumType.STRING)
图书流派;
@多个(级联=级联类型.ALL)
@JoinTable(name=“author\u book”,
joinColumns=@JoinColumn(name=“author\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“book\u id”,referencedColumnName=“id”))
私有集作者;
这就是我所做的。在作者和书之间是多对多的

但问题是,如何定义作者和出版物(书籍、漫画、杂志)之间的多对多关系。出版物可以是这三者中的任意一种

在运行时,查询可以是任何内容,例如:

  • 使用作者“ABCD”保存书籍
  • 使用作者“ABCD”保存漫画
  • 用作者“EFGH”保存杂志“mag”
在这种情况下,如何在以下领域中编写@多对多:作者、书籍、漫画、杂志


如何书写作者与出版物[书籍、漫画、杂志等]之间的多对多关系?

我建议研究API层,这是一种比REST好得多的方法…….GraphQL的一些主要功能,但REST没有1)询问您需要什么,得到准确的结果2)在一个请求中获得许多资源3)描述类型系统的可能性…….例如
{project(name:“GraphQL”){tagline}}
从项目中选择tagline,其中name=“GraphQL”
产生
{project:{“tagline:”API查询语言}
你需要一个支点tabel@RaymondNijland:我编辑了这篇文章。现在有答案吗。@亚当:我编辑了这篇文章。现在有答案吗?