有几种方法可以映射JPA和Hibernate中的多对多关系,通过使用@ManyToMany, @OneToMany和@ManyToOne,包括:
- 连接实体单向和双向映射与单一主键,@OneToMany和@ManyToOne
- 连接实体单向和双向映射与复合主键,@OneToMany和@ManyToOne
- 没有加入实体的单向和双向映射与@ManyToMany
本指南将向您展示如何映射每种方法的优缺点
考虑一下出版商和图书之间的关系。一个出版社可以出版多本书,一本书可以由多个出版社出版
1.连接实体单向映射与单一主键和@ManyToOne
将使用一个@Id和两个@ManyToOne来定义已连接的实体。父实体上没有子集合关联映射
@Entity
public class BookPublisher { @Id@GeneratedValue(strategy = GenerationType.IDENTITY)private int id;@ManyToOne(fetch = FetchType.LAZY, optional = false)@JoinColumn(name = "book_id")private Book book;@ManyToOne(fetch = FetchType.LAZY, optional = false)@JoinColumn(name = "publisher_id")private Publisher publisher;@Column(name = "published_date")private Date publishedDate;...
}@Entity
public class Book { @Id@GeneratedValue(strategy = GenerationType.IDENTITY)private int id;private String name;...
}@Entity
public class Publisher { @Id@GeneratedValue(strategy = GenerationType.IDENTITY)private int id;private String name;...
}
FetchType.LAZY用于@ManyToOne而不是默认的FetchType.EAGER,来
防止潜在的性能问题。
@JoinColumn指定外键列。它是